一名程序猿啊
2020-01-15 01:01
采纳率: 100%
浏览 616
已采纳

springboot2拦截器返回false后静态资源无法访问

  1. springboot2拦截器返回false以后无法加载静态资源

    项目结构

    图片说明

拦截器代码

@Override
public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler) throws Exception {

        User user = (User)request.getSession().getAttribute(GlobalConst.USER_SESSION_KEY);
        logger.info(request.getRequestURI().toString());
        if (user == null)  {
            response.sendRedirect("/login");
            logger.info("请先登录");
            return false;
        } else {
            // 验证权限
            String role = user.getRole();
            if (!this.hasPermission(handler, role)) {
                response.sendError(HttpStatus.FORBIDDEN.value(), "无权限");
                return false;
            }
        }
        return true;
    }

2.自定义的WebConfigurer

@Configuration
public class WebConfigurer implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**")
                .excludePathPatterns("/")
                .excludePathPatterns("/login",  "/tologin")
                .excludePathPatterns("/recharge/notify").excludePathPatterns("/recharge/rechargeok")
                .excludePathPatterns("/verify/getcode");
    }
}

3.application.properties

# 静态文件请求匹配方式
spring.mvc.static-path-pattern=/**
# 修改默认的静态寻址资源目录
spring.resources.static-locations=classpath:/static/

未登录时preHandle返回false,静态资源无法加载。
登录后可以加载静态资源;或者把response.sendRedirect("/login");注释掉再把return改为true也可以加载静态资源

遇到这问题很郁闷,找了半天也没找到啥原因

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • Amo_lt 2020-01-15 09:36
    已采纳

    你的静态资源放到哪里?static下面吗?

    已采纳该答案
    1 打赏 评论
  • zyydomain 2020-01-15 09:39

    在WebConfigurer 里加上静态资源的拦截 .excludePathPatterns("/static/**"); 配置你的静态资源路径

    打赏 评论

相关推荐 更多相似问题