大家好,又见面了,我是你们的朋友全栈君。
拦截器,主要用于拦截前端请求,常用于登录检查。
下面是演示使用拦截器拦截未登录的用户访问需要登录的模块情景,使用配置方式实现和注解方式实现代码:
配置方式:
1、web.xml中配置监听器,对于所有的/admin开头的请求,都走com.blog.interceptor.LoginInterceptor这个拦截器。
2、再看com.blog.interceptor.LoginInterceptor的实现代码:
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
SysUser currentUser = SessionHelper.getCurrentUser(arg0);
if (currentUser == null) {
// 拦截,重定向到登陆页面
// 需要加上当前请求路径
arg1.sendRedirect(arg0.getContextPath() “/Login/loginpage.do”);
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
}
对于客户端的每次登录,都先记录登录用户的用户名信息,对于每次请求,获取session中的用户信息,如果用户信息为空,则认为该用户未登录,则跳转到登录页面。
注解方式:
拦截类是一样的,只需要增加配置类。
//页面配置类,不再使用xml配置需要拦截打请求
@Configuration
public class WebMvcConfg extends WebMvcConfigurationSupport {
@Autowired
private LoginInterceptor loginInterceptor;// 需要使用的拦截器,对于所有admin开头的请求都需要进行登录拦截
// 拦截器链
@Override
public void addInterceptors(InterceptorRegistry registry) {
// addPathPatterns 用于添加拦截规则
// excludePathPatterns 用于排除拦截
registry.addInterceptor(loginInterceptor).addPathPatterns(“/admin/**”)
.excludePathPatterns(“/admin/**/exportUser”,”/admin/**/exportAllUser”);
}
// 处理静态资源
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131043.html原文链接:https://javaforall.cn