SpringMVC 实现拦截器,拦截功能。

1.创建Bean

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/manage/**"/>
            <!--<mvc:exclude-mapping path="/manage/user/login.do"/>-->
            <bean class="com.easygou.controller.common.interceptor.AuthorityInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

path: 你要拦截那个文件夹下面的类

class: 你要实现的拦截器的类。我这里命名:AuthorityInterceptor  它继承至 HandlerInterceptor

2.获取捕获的类和方法:

  HandlerMethod handlerMethod = (HandlerMethod) handler;
        String methodName = handlerMethod.getMethod().getName();
        String className = handlerMethod.getBean().getClass().getSimpleName();

如下图所示:

3. 获取前端传过来的 session.

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("preHandle");
             HttpSession session = request.getSession();
            User user = (User) session.getAttribute(Constants.CURRENT_USER);
           

然后根据获取的值进行判断:

 if (user == null || user.getRole().intValue() != Const.Role.ROLE_ADMIN){
                //返回一个响应对象
                response.reset();
                response.setCharacterEncoding("UTF-8");
                response.setContentType("application/json;charset=UTF-8");
                PrintWriter out = response.getWriter(); //输入流
                if (user == null){
                    out.print(JsonUtil.obj2String(ServerResponse.createByErrorMessage("拦截器拦截,用户未登录")));
                }else {
                    Map resultMap = Maps.newHashMap();
                    resultMap.put("success",false);
                    resultMap.put("msg","请登录管理员");
                    out.print(JsonUtil.obj2String(resultMap));
                }
                out.flush();
                out.close();
                return false;
            }

解决登录死循环问题(在头部加上这个):

if (StringUtils.equals(methodName,"login") && StringUtils.equals(className,"UserManageController")){
            return true;
        }
发布了37 篇原创文章 · 获赞 4 · 访问量 6826

猜你喜欢

转载自blog.csdn.net/m0_37918421/article/details/99563164