springboot的拦截器

用于场景:有些后台页面需要登录后才能访问

直接上代码:

第一步:新建一个自己的拦截器:建立拦截器有两种

方式一:

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";
        }

    }

  就三步,个人理解,错误的地方请大家指点,谢谢!

posted @ 2021-07-01 10:29  聆听宇宙的歌唱  阅读(88)  评论(0编辑  收藏  举报