SpringBoot 配置登录拦截器

SpringBoot中使用拦截器

第一步:自定义一个拦截器
第二步:在配置类或者配置xml文件中注册拦截器和指定拦截哪些路径

1.新建登录拦截器

新建一个intercepors包,用来装拦截器。新建登录拦截器LoginInterceptor.java,用来拦截验证登录(就是说没有登录过的用户必须先登录才能进入网站的其他页面)
记得要加@Component注解,因为我们需要在下一步的WebAppConfig.java类中注入这个拦截器类

@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("开始拦截");
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

2.新建配置类WebAppConfig.java

  1. 新建config包,用来装初始化文件,在下面新建WebAppConfig.java
  2. 首先将LoginInterceptor.java注入到WebAppConfig.java中
  3. 然后在WebAppConfig中注册拦截器,使其生效。
    addPathPatterns 用来设置拦截路径,excludePathPatterns 用来设置白名单,也就是不需要触发这个拦截器的路径。
@Configuration
public class WebAppConfig implements WebMvcConfigurer {

    @Autowired
    private LoginInterceptor loginInterceptor;

    //    这个方法是用来注册拦截器,我们自己写好的拦截器是需要添加注册才能生效
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //.addPathPatterns("/**") 拦截所有请求
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/login");
    }

    //    这个方法是用来配置静态资源,比如html,css,js等
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    }
}

3. 测试类

@RestController
public class LoginController {

    @RequestMapping("/login")
    public String login(){
        return "login success";
    }

    @RequestMapping("/home")
    public String home(){
        return "hello home";
    }
}

运行结果,如果输入http://localhost:8080/home,后台会输出“开始拦截”;如果输入http://localhost:8080/login,不会被拦截,正常输出"login success"

4.登录拦截器的使用

最简单的一个登录拦截器是通过判断session中是否有用户信息,当我们第一次登录成功后,就将自己的信息以键值对的形式记录到session中,第二次登录时,判断session中是否有用户信息,如果有就是已经登录过了,如果没有就是未登录。


@Component
public class LoginInterceptor implements HandlerInterceptor {
 
    //这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //每一个项目对于登陆的实现逻辑都有所区别,我这里使用最简单的Session提取User来验证登陆。
        HttpSession session = request.getSession();
        //这里的User是登陆时放入session的
        User user = (User) session.getAttribute("user");
        //如果session中没有user,表示没登陆
        if (user == null){
            //这个方法返回false表示忽略当前请求,如果一个用户调用了需要登陆才能使用的接口,如果他没有登陆这里会直接忽略掉
            //当然你可以利用response给用户返回一些提示信息,告诉他没登陆
            return false;
        }else {
            return true;    //如果session里有user,表示该用户已经登陆,放行,用户即可继续调用自己需要的接口
        }
    }
 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }
 
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

SSM中使用拦截器

  1. 拦截器同上
  2. 配置文件spring.xml
 <!--设置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--拦截哪些路径-->
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/login"/>
            <!--注册拦截器-->
            <bean class="com.msj.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容