Spring boot之登录拦截器

来源:互联网 发布:药品查询软件 编辑:程序博客网 时间:2024/06/08 04:30

首先,继承一个拦截器:

package com.cy.example.filter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class LoginInterceptor implements HandlerInterceptor {    private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);    public void postHandle(HttpServletRequest request,            HttpServletResponse response, Object handler,            ModelAndView modelAndView) throws Exception {        // TODO Auto-generated method stub    }    public void afterCompletion(HttpServletRequest request,            HttpServletResponse response, Object handler, Exception ex)            throws Exception {        // TODO Auto-generated method stub    }    public boolean preHandle(HttpServletRequest request,            HttpServletResponse response, Object handler) throws Exception {        // TODO Auto-generated method stub        //获取session        HttpSession session = request.getSession(true);        //判断用户ID是否存在,不存在就跳转到登录界面        /*String url = request.getServletPath();        logger.info("----进入拦截器--url:"+url+"-----");        if(url.contains("/system/user/validate")){            logger.info("----放过/system/user/validate-----");            return true;        }*/        if(session.getAttribute(WebConfig.LOGIN_USER) == null){            logger.info("------跳转到login页面-----");            response.sendRedirect(request.getContextPath()+"/index");            return false;        }else{            session.setAttribute(WebConfig.LOGIN_USER, session.getAttribute(WebConfig.LOGIN_USER));            return true;        }    }}
在preHandle方法中获取缓存中的用户名,如果没有则返回登录界面,如果有则通过拦截器。下面就把新写的拦截器注册一下:
package com.cy.example.filter;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import com.cy.example.Application;@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter{    public static String LOGIN_USER = "loginUser";    public WebConfig(){        super();    }    @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");        registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/");        super.addResourceHandlers(registry);      }    @Override    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {        configurer.enable();    }    @Override    public void addInterceptors(InterceptorRegistry registry) {        //拦截规则:除了/index,/system/user/validate其他都拦截判断        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/index","/system/user/validate");        super.addInterceptors(registry);    }}

这边在写的时候遇到点问题,在WebConfig类上多加了2个注解,分别是@EnableWebMvc
@ComponentScan
这两个注解一个是配置包扫描的,一个是启用Spring MVC支持。感觉加了这两个注解就是把spring boot的默认配置全部取消了,全部是由自己配置,这就导致了我的静态资源一直访问不到。
addInterceptors
这个方法是添加拦截器,
registry.addInterceptor(new LoginInterceptor()).addPathPatterns(“/**”).excludePathPatterns(“/index”,”/system/user/validate”);
这个是使用拦截器拦截所有请求,除了”/index”,”/system/user/validate”这两个路径

addResourceHandlers(ResourceHandlerRegistry registry)这个方法是这边添加拦截器之后默认的静态资源路径失效,在这个方法中需要重新指定。

原创粉丝点击