用于场景:有些后台页面需要登录后才能访问
直接上代码:
第一步:新建一个自己的拦截器:建立拦截器有两种
方式一:
HandlerInterceptor实现该类的
preHandle接口
public class AdminInterceptor implements HandlerInterceptor {
/**
* 在请求处理之前进行调用(Controller方法调用之前)
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// System.out.println("执行了TestInterceptor的preHandle方法");
try {
//统一拦截(查询当前session是否存在user)(这里user会在每次登陆成功后,写入session)
User user=(User)request.getSession().getAttribute("USER");
if(user!=null){
return true;
}
response.sendRedirect(request.getContextPath()+"你的登陆页地址");
} catch (IOException e) {
e.printStackTrace();
}
return false;//如果设置为false时,被请求时,拦截器执行到此处将不会继续操作
//如果设置为true时,请求将会继续执行后面的操作
}
方式二:
HandlerInterceptorAdapter继承该类。并重写
preHandle方法,如下:
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object object=request.getSession().getAttribute("user");
if(!(handler instanceof HandlerMethod)){
return true;
}
if(object!=null){
return true;
}else{
request.getRequestDispatcher("/admin/login").forward(request,response);
return false;
}
}
}
截图说明下,我用的是第二种方式建立拦截器的

第二步:把自己写的拦截器注入,现实WebMvcConfigurer类,并来调用,代码如下:
@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin/login").excludePathPatterns("/admin/doLogin");
}
}
截图说明下:

第三步:登录成功的操作:主要是要把用户信息储存到session中,拦截器中好做判断。
@ApiOperation(value = "用户登录", notes = "用户登录")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "username", value = "用户名", required = true, dataType = "string"),
@ApiImplicitParam(paramType = "query", name = "password", value = "用户密码", required = true, dataType = "string")
})
@RequestMapping(value = "doLogin",method = RequestMethod.POST)
public String doLogin(String username, String password, ModelMap modelMap, HttpSession session){
User user=userService.byUserName(username);
if(null !=user){
if(user.getPassword().equals(MD5Tool.md5(password))){
modelMap.put("user",user);
session.setAttribute("user",user);//把用户储存到session中
return "index";
}else{
return "login";
}
}else{
return "login";
}
}
就三步,个人理解,错误的地方请大家指点,谢谢!