springboot拦截器配置(登录拦截)

对拦截器进行分析解刨,七步之内保证配置完毕.



前言

为啥使用拦截器嘞?
因为有些项目后端总有些接口是对用户不开放的,只有输入正确的账号和密码才可以进行访问,假如用户拿到了你后端的一些接口,你不设置拦截器,那么用户在url中输入接口即可访问,这样很不安全,所以要配置一个拦截器,对一些请求进行拦截.


一、编写拦截器实现类

实现HandlerInterceptor接口,重写里面三个比较常用的方法,实现本身的业务逻辑代码,第一个最重要的是拦截器,其他两个是对性能的优化.

 @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler){
        System.out.println("执行了preHandle方法");
        try {
            //统一拦截,查询当前session是否存在user,这里user每次登录后会存入session
            ruserBean user= (ruserBean) req.getSession().getAttribute("vip");//后端给前端传递的数据名称
            if (user!=null){
                return true;
            }
            resp.sendRedirect("/gotologin");//对拦截到的进行重定向
        }catch (IOException io){
            io.printStackTrace();
        }
        return false;//如果设置为false时,被请求时,拦截器执行到此不再执行,相反会继续执行下面的操作
    }

第一步是对拦截的内容做统一拦截,并返回给浏览器数据结果.对拦截到的进行重定向,始终回到登录界面

 @Override
    public void postHandle(HttpServletRequest req, HttpServletResponse resp, Object handler, ModelAndView modelAndView){
        System.out.println("执行了Posthandler方法");//请求处理以后进行调用,Controller方法之后
    }

上面这一步是在请求处理完成之后进行的调用(Controller方法之后)

 @Override
    public void afterCompletion(HttpServletRequest req, HttpServletResponse resp, Object handler, Exception ex){
        System.out.println("执行了afterCompletion");
        //在整个请求结束之后,渲染了对应的视图以后执行,主要用于资源清理工作
    }

最后一步是在请求结束之后被调用,渲染对应的视图之后执行,一般是用于资源清理.

二、拦截器配置文件

对拦截器的配置文件进行编写,并继承WebMvcConfigurer类,并重写重要方法:addInterceptors.

@Configuration
public class LoginConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        //注册TestInterceptor拦截器
        InterceptorRegistration registration=registry.addInterceptor(new SSLoginFilter());
        registration.addPathPatterns("/**");

开头不要忘了加上注解(@Configuration),这一步主要作用于对拦截的内容进行配置,我这里是将所有请求进行拦截,可根据自身项目做拦截.

registration.excludePathPatterns("/gotologin",
				"/admin",
				"/**/*.html",
				"/**/*.css",
                "/**/*.js",
                "/**/*.gif",
                "/**/*.ico");//添加不被拦截的路径,有很多静态资源

这一步是配置不被拦截的路径,如果有配置指定拦截路径,可以忽略这一步,这一步针对全部拦截的,不被拦截的资源内容多半为登录路径和静态资源路径,这一步也是根据自己的项目去配置要放行的资源,一定要注意不要忘了或者漏一个,因为拦截的全部,那样的话加载不到就很烦!


小结

就这样一个后端拦截器就已经配置完毕,拦截器针对的路径,只要是在url中输入的路径都会进行拦截,其实大家在用自己写的项目不去部署到服务器,供大众浏览的情况下,完全没有必要去设置拦截器.
今天的内容到此结束,有哪里不足或者更好的建议,欢迎留言吐槽,如果有哪里不懂的可以私信博主,博主将一一回复,感谢认可,感谢支持!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐