SpringMVC编写登录权限拦截器

一. 什么是登录权限拦截器?

  一个网站总会有页面是需要用户已经登录过才能访问的,比如购物车,个人详情页等等,拦截器可以对访问这些页面的请求做一个拦截,在判断是否存有用户登陆后的cookie或者session之后对其放行或者是重定向到登录页面。

二. 编写登录拦截器

/**
 * 〈访问需要登录的网站被拦截,没有登录则转到登录页面〉
 * @author 龙
 * @create 2018/8/23 22:01
 * @since 1.0.0
 */
public class LoginInterceptor implements HandlerInterceptor {

    @Autowired
    private JedisService jedisService;
    //与SSO中字符串对应,不要轻易更改
    private static final String USER_LOGIN="gfsdgvafvqweac:";
    private Logger LOGGER=LoggerFactory.getLogger(LoginInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest,
                 HttpServletResponse httpServletResponse, Object o) throws Exception {
        //获取用户登陆后的令牌
        Cookie[] cookies=httpServletRequest.getCookies();
        String token=null;
        for (Cookie cookie:cookies) {//解析cookie
            if("token".equals(cookie.getName()))  token=cookie.getValue();
        }
        if(StringUtils.isEmpty(token)){//查找令牌,没有令牌则返回登录页面
            LOGGER.info("没有查找到令牌,返回登录页面");
            httpServletResponse.sendRedirect("/user/login.html");
            return false;
        }


        User user=JSONUtils.jsonToPojo(jedisService.get(USER_LOGIN+token),User.class);
        if(user==null)  {
            LOGGER.info("令牌无效或过期,返回登录页面");
            httpServletResponse.sendRedirect("/user/login.html");
            return false;
        }
        //用户登录状态有效,验证通过,转到欲访问的页面
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest,
               HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest,
                HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

三. 拦截器配置:springmvc.xml

    <!--配置权限拦截器,拦截所有需要登录才能访问的页面-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--对下面路径进行拦截,可配置多个路径-->
            <mvc:mapping path="/user/cart.html"/>
            <!--使用下面拦截器进行拦截-->
            <bean class="org.lizi.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值