美文网首页我爱编程程序员
spring security访问静态资源文件出现404

spring security访问静态资源文件出现404

作者: 鑫鑫哥哥丨 | 来源:发表于2018-03-10 22:39 被阅读0次

    根据《Java EE开发的颠覆者 Spring Boot 实战》来学习Spring Security,然后照着书上的代码去敲,发现了很多书上写和实际情况不一样的地方。

    1. 书上的User实体类还可以实现接口,而我如果实现接口UserDetails,一运行就会报错,解决办法是新创建一个MyUserDetails去继承User实体类,然后实现UserDetails接口。
    2. 书上说Spring Boot针对Spring Security有自动配置,其中包括忽略/css/、/js/、/images/等静态文件的拦截,然后书中的实战代码也并没有对这几个文件设置允许访问,依然可以引用bootstrap,可我在实际代码中发现并不可以!还是要给这几个文件路径进行匹配,然后允许所有用户访问,看下面的代码
    http.authorizeRequests()
                    //允许所有用户访问"/","/jquery/**","/semantic/**","/css/**","/js/**","/images/**"
                    .antMatchers("/",
                            "/jquery/**",
                            "/semantic/**",
                            "/css/**",
                            "/js/**",
                            "/images/**",
                            "/fonts/**",
                            "/**/favicon.ico",
                            "/**").permitAll()
                    //其他请求需要登录认证
                    .anyRequest().authenticated()
    

    如果不加上这段代码访问静态文件都成302,访问静态文件全都跳转到login去了。
    但新的问题是加上这段代码后访问静态文件又变成404了,检查了几十遍路径没有错,然后在static文件夹下随便新建了一个txt文件去访问,也是404,最后解决办法看下面代码

    @Configuration
    public class WebMvcConfig extends WebMvcConfigurationSupport {
    
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/login").setViewName("login");
        }
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        }
    }
    

    重点是这里

    @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        }
    

    需要在后面重新映射一下静态资源路径,自己觉得原因可能是Spring Boot默认的静态资源路径不知道被我怎么搞的失效了,怀疑和Spring Security有关,
    而且在html文件中的引用方式也要改变,看代码

    <link rel="stylesheet" type="text/css" th:href="@{/static/semantic/dist/semantic.min.css}">
        <script type="text/javascript" th:src="@{/static/js/jquery.min.js}"></script>
        <script type="text/javascript" th:src="@{/static/semantic/dist/semantic.min.js}"></script>
    

    我是引用的semantic-ui,引用路径前面都要加上/static,Spring Boot默认下是不需要的。

    相关文章

      网友评论

        本文标题:spring security访问静态资源文件出现404

        本文链接:https://www.haomeiwen.com/subject/jzabfftx.html