springboot 增加登录拦截

最近从头开始用springboot做了一个项目,做到了一个登录拦截,实现很简单,记录一下。

1.注册拦截器,新建类 MVCConfiguration

@Configuration
@EnableCaching
public class MVCConfiguration implements WebMvcConfigurer {

    /*
    * 配置拦截器
    * */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加对用户是否登录的拦截器,并添加过滤项、排除项
        //一开始把用户登录功能也给拦截了,跳转不了
        registry.addInterceptor(new UserLoginInterceptor()).addPathPatterns("/**")
                .excludePathPatterns("/static/*")
                .excludePathPatterns("/toLogin")
        .excludePathPatterns("/user/verifyUser");
        WebMvcConfigurer.super.addInterceptors(registry);

    }

    /*
    * 配置静态资源
    * */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }

    //设置默认页面
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:/toLogin");
        //设置优先级  当请求地址有重复的时候  执行优先级最高的
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
        WebMvcConfigurer.super.addViewControllers(registry);
    }


}

2.拦截器,实现 UserLoginInterceptor

@Component
public class UserLoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    	
        HttpSession httpSession=request.getSession();
        Object userId=httpSession.getAttribute("userId");
        if(null!=userId ){
            System.out.println("已登录"+userId);
            return  true;
        }else{
            System.out.println("未登录");
            response.sendRedirect(request.getContextPath()+"/toLogin");
            return  false;
        }

    }

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

    }

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

    }
}

三个方法:
1.preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理。
2.postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。
3.afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章