使用拦截器实现权限控制

权限需求说明:如果用户不登录,则不允许访问购物车/订单等业务.如果用户在不登录的条件下访问涉密的业务,应该跳转到用户的登陆页面

拦截器执行示意图 

 

 创建拦截器

@Component
public class UserInterceptor implements HandlerInterceptor{
  
   /**
    * SpringMVC框架单独封装的拦截器API.简化程序调用过程.
    * 旧配置:web.xml
    * 拦截器说明:
    * 一般使用拦截器时主要的目的是为了控制页面请求的跳转.
    *  1.preHandle  处理器执行之前进行拦截
    *  2.postHandle 处理器执行完成之后拦截
    *  3.afterCompletion 全部业务逻辑执行完成之后并且视图渲染之后拦截
    */
  
   /**
    * 控制用户登录
    * boolean
    *    true:  表示放行
    *    false: 表示拦截
    *
    * 拦截器业务分析:
    *    如果用户登陆则放行.
    *    如果用户未登录则拦截.
    * 如何判断用户是否登录
    * 1.检查用户是否有Cookie信息.
    * 2.检查redis服务器中是否有ticket信息.
    * 如果上述判断正常,则表示用户已登录,可以放行.
    */
  
   @Autowired
   private JedisCluster jedisCluster;
   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      //1.判断用户是否有cookie.
      String ticket = CookieUtil.getCookieValue(request, "JT_TICKET");
      if(!StringUtils.isEmpty(ticket)) {
         //2.表示ticket信息不为null 有值
         String userJSON = jedisCluster.get(ticket);
         if(!StringUtils.isEmpty(userJSON)) {
            //redis数据一切正常
            return true; //请求放行
         }else {
            //用户有ticket,但是redis中没有改数据.,cookie有问题
            CookieUtil.deleteCookie(response,"JT_TICKET","jt.com", "/");
         }
      }   
      //重定向到用户的登陆页面
      response.sendRedirect("/user/login.html");
      return false;
   }
}

 添加拦截器配置

/**
 * 伪静态核心,拦截.html请求,利用配置类代替web.xml配置
 */
@Configuration
public class MvcConfigurer implements WebMvcConfigurer {

    @Autowired
    private UserInterceptor userInterceptor;

    //开启匹配后缀型配置 /index,/index.html,/index.abc,拦截之后,执行视图解析器
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.setUseSuffixPatternMatch(true);
    }

    //添加拦截器配置
    // /cart/** 所有的路径   /cart/* 一级目录
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(userInterceptor).addPathPatterns("/cart/**", "/order/**");
    }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值