springboot拦截器配置(登录拦截)
对拦截器进行分析解刨,七步之内保证配置完毕.
文章目录
- 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中输入的路径都会进行拦截,其实大家在用自己写的项目不去部署到服务器,供大众浏览的情况下,完全没有必要去设置拦截器.