• Spring mvc中自定义拦截器


    一、要实现的一个功能:

      1、打开特定的一些页面时必需强制用户进行登录。

      2、登录后再返回到之前的页面。

    二、先写一个service,实现从cookie中判断用户是否登录。

      1、TT_TOKEN为登录成功时,响应给浏览器的Cookie的键。

    @Service
    public class UserServiceImpl implements UserService{
    
        @Value("${SSO_BASE_URL}")
        private String SSO_BASE_URL;
        @Value("${SSO_USER_INFO}")
        private String SSO_USER_INFO;
    
        @Override
        public TbUser getCookieByToken(HttpServletRequest request, HttpServletResponse response) {
            try{
                String token = CookieUtils.getCookieValue(request, "TT_TOKEN");
                if (StringUtils.isBlank(token)) {
                    return null;
                }
                //cookie中如果取到值,调用sso服务从cookie取到用户信息
                String json = HttpClientUtil.doGet(SSO_BASE_URL + SSO_USER_INFO + token);
                TaotaoResult result = TaotaoResult.format(json);
                if (result.getStatus() != 200) {
                    return null;
                }
                result = TaotaoResult.formatToPojo(json, TbUser.class);
                TbUser user = (TbUser) result.getData();
                return user;
            }catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    }

    二、拦截器代码如下

      1、定义一个拦截器LoginInterceptor实现spring mvc的接口HandlerInterceptor。

      2、重写里面三个方法。

    public class LoginInterceptor implements HandlerInterceptor{
    
        @Autowired
        private UserService userService;
        @Value("${SSO_LOGIN_URL}")
        private String SSO_LOGIN_URL;
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            TbUser user = userService.getCookieByToken(request, response);
            if (user == null) {
                response.sendRedirect(SSO_LOGIN_URL + "?redirectUrl=" + request.getRequestURL());
                return false;
            }
            return true;
            //返回false说明拦截, true放行
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            //拦截后,返回modelAndView之前
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            //返回modelAndView之后
        }
    }

    三、在spingmvc.xml配置拦截器

    <!-- 配置拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
                <mvc:mapping path="/item/**"/>
                <bean class="com.taotao.portal.Interceptor.LoginInterceptor" />
            </mvc:interceptor>
        </mvc:interceptors>

      1、path为要拦截的路径。

      2、bean写拦截器的全限定类名。

  • 相关阅读:
    python之xlwt模块列宽width、行高Heights详解
    Testlink在CentOS、windows安装
    Appium中长按按钮操作
    CentOS oracle Client客户端安装
    WebDriver中自动识别验证码--Python实现
    shell批量重命令文件脚本
    MFC 显示图片
    MFC CEdit控件 自动换行
    第一次社会
    undefined reference 问题各种情况分析
  • 原文地址:https://www.cnblogs.com/huclouy/p/9484483.html
Copyright © 2020-2023  润新知