请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Interceptor拦截器的问题

@Slf4j
public class UserLoginInterceptor implements HandlerInterceptor {

    @Resource
    StringRedisTemplate stringRedisTemplate;

    /**
     * true 表示继续流程,false表示中断
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("preHandle...");
        String token = request.getHeader("token");
        if (StringUtils.isEmpty(token)) {
            log.info("token为空,请求被拦截");
            throw new BusinessException("token为空,请求被拦截了");
        }

        String redisToken = null;
        try {
            redisToken = stringRedisTemplate.opsForValue().get(token);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (redisToken == null) {
            log.error("token无效, 请求被拦截");
            throw new BusinessException("token无效, 请求被拦截");
        } else {
            log.info("已登录: {}", redisToken);
        }
        return true;
    }
}

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    // TODO exclude路径在配置文件读取
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new UserLoginInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns( "/system/admin/user/login", "/system/admin/user/logout",
                        "/system/admin/kaptcha");
    }
}

图片描述

前端输出
图片描述

后端输出:

22.538 ERROR c.c.s.i.UserLoginInterceptor  :47   token无效, 请求被拦截

想用另一种方法实现用户拦截,这是我写的拦截器,在server模块,逻辑跟过滤器一样,从后端的返回值和日志看拦截像是成功了。
但是不知道为什么前端页面还是能读取到静态的资源。
Interceptor拦截器能不能代替过滤器?

正在回答

1回答

拦截器和过滤器都可以的。目的都是在业务代码之前拦截到,并做权限判断。

静态资源不会被拦截,你可以在vue的拦截器里增加判断(前端统一打印日志的地方),如果后端返回的是未登录,那么就跳转到登录页面

0 回复 有任何疑惑可以回复我~
  • 提问者 无情慕 #1
    if (response.data.status != 0) {
        router.push('/login');
      }
    在拦截器里加了跳转的代码。。的确可以实现跳转了,但是直接访问/system/user的话,会有个不知道算不算的bug的bug,会先看到system/user的静态资源(一闪而过然后转到login)。
    回复 有任何疑惑可以回复我~ 2020-05-18 13:04:35
  • 甲蛙 回复 提问者 无情慕 #2
    在权限管理那章,会介绍vue路由的拦截,就不会有这个问题,可以往后看
    回复 有任何疑惑可以回复我~ 2020-05-18 15:04:10
  • 提问者 无情慕 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-05-18 15:05:24
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信