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

根据《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默认下是不需要的。

猜你喜欢

转载自blog.csdn.net/sunboylife/article/details/88234696