拦截器
将用户请求同意拦截在拦截器中,在拦截器中定义规则,如果该请求不满足过滤规则,则返回首页,满足这放行。
在Spring MVC中拦截请求是通过处理器拦截器HandlerInterceptor来实现的,它拦截的目标是请求的地址。在Spring MVC中定义一个拦截器,需要实现HandlerInterceptor接口。
?
HandlerInterceptor
源码解析:
1.preHandle()方法
该方法将在请求处理之前被调用
2.postHandle()方法
该方法将在当前请求进行处理之后,在modelandiview对象返回之后被调用的
3.afterCompletion()方法
该方法将在整个当前请求结束之后
定义规则
使用preHandle()方法在请求之前调用
/**
*检测全局session对象中是否有uid数据,如果有则方行,如果没有重定向到登录页面
* @param request 请求对象
* @param response 响应对象
* @param handler 处理器(url+Conroller:映射)
* @return 如果返回值为true表示放行当前的请求,如果返回值为flase则拦截当前请求
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//HttpServletRequest对象来获取session对象
Object obj = request.getSession().getAttribute("uid");
if (obj ==null){
//说明没有登录过系统,则重定向到login.html页面
response.sendRedirect("/web/login.html");
//结束后续的调用
return false;
}
//请求放行
return false;
}
过滤器
添加白名单:那些资源在不登陆的情况下使用
添加黑名单:在用户注册状态下才可以访问的页面资源
需要借助WebMvcConfigure接口,对请求信息进行过滤
//将自定义拦截器进行注册
default void addInterceptors(InterceptorRegistry registry) {
}
@Configuration//加载当前的拦截器并进行注册
public class LoginInterceptorConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 创建自定义拦截器
LoginInterceptor interceptor = new LoginInterceptor();
//配置白名单:存放一个list集合 白名单
List<String> patterns =new ArrayList<>();
patterns.add("/bootstrap3/**");
patterns.add("/css/**");
patterns.add("/images/**");
patterns.add("/js/**");
patterns.add("/web/register.html");
patterns.add("/web/login.html");
patterns.add("/web/index.html");
patterns.add("/web/product.html");
patterns.add("/users/reg");
patterns.add("/users/login");
//拦截器的注册
registry.addInterceptor(interceptor)
.addPathPatterns("/**").excludePathPatterns(patterns);//表示要拦截的url是什么
}
}
|