拦截器Intercepter

springmvc实现拦截器可以通过继承(不推荐)HandlerInterceptorAdapter,或者实现(推荐)HandlerInterceptor类,两种都可以,只是看个人喜欢

继承方式验证登录:

public class LoginInterceptor extends HandlerInterceptorAdapter{

	private static final String[] unHandle = new String[]{"/user/register","/user/login"};
	
	private static final List<String> list = new ArrayList<String>(Arrays.asList(unHandle));
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		String url = request.getRequestURI();
		if(list.contains(url)){
			return true; 
		}
	//	User user = SysUtil.getCurrentUser();
		return super.preHandle(request, response, handler);
	}

	
}

实现接口方式

public class AuthIntercepter implements HandlerInterceptor {

    protected final Logger log = LoggerFactory.getLogger(getClass());

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader("token");
        if (StringUtil.isNotBlank(token)) {
            //验证token
            String s = "/sso/loginInterface?token=" + token+"&loginflag=interface");
            if (s.equals("【true】")) {
                return true;
            }
        }
        //未登录
        //todo test
//        return false;
        throw new UnauthenticatedException();
//        return true;
    }
    @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 {
    }
}

当然需要在springmvc配置文件spring-mvc.xml里面配置:

 <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**" />
            <!-- 需排除拦截的地址 -->
            <mvc:exclude-mapping path="/swagger-ui.html"/>
            <mvc:exclude-mapping path="/webjars/**"/>
            <mvc:exclude-mapping path="/v2/**"/>
            <mvc:exclude-mapping path="/swagger-resources/**"/>
            <bean class="cn.gov.zjport.pen.restapi.intercepter.AuthIntercepter" />
        </mvc:interceptor>
    </mvc:interceptors>

当然也可以基于注解

@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new LoginInterceptor())
		.addPathPatterns("/**")
		.excludePathPatterns("/static/");
		super.addInterceptors(registry);
	}

在这里插入图片描述
当然在拦截器里面也可以通过java方式判断不需要过滤的路径,也可以通过配置,推荐使用java方式进行设置.

世界上所有的不公平都是由于当事人能力不足造成的.
原文地址:https://www.cnblogs.com/javayida/p/13347013.html