Spring Security 静态资源访问

在搞 Spring Security 的时候遇到了一个小坑,就是静态资源加载的问题。

当我们继承了 WebSecurityConfigurerAdapter的时候,会去重写几个方法。去设定我们自己要过滤的路径或者是权限的一些规则。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    CustomUserService customUserService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

auth.userDetailsService(customUserService).passwordEncoder(new BCryptPasswordEncoder());
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/global/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
        // 开始请求权限配置
        .authorizeRequests()
        // 我们指定任何用户都可以访问多个URL的模式。
        // 任何用户都可以访问以"/resources/","/signup", 或者 "/about"开头的URL。
//      .antMatchers("/global/**","/static/**").permitAll()
        // 请求匹配 /admin/** 只拥有 ROLE_ADMIN 角色的用户可以访问
        .antMatchers("/admin/**").hasRole("ADMIN")
        // 请求匹配 /user/** 拥有 ROLE_ADMIN 和 ROLE_USER 的角色用户都可以访问
        .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
        // 任何以"/db/" 开头的URL需要同时具有 "ROLE_ADMIN" 和 "ROLE_DBA"权限的用户才可以访问。
        // 和上面一样我们的 hasRole 方法也没有使用 "ROLE_" 前缀。
        // .antMatchers("/db/**").access("hasRole(‘ADMIN‘) and hasRole(‘DBA‘)")
        // 其余所有的请求都需要认证后才可以访问
        .anyRequest().authenticated().and().formLogin()
        // 登陆界面;默认登陆成功后的界面(不起作用);默认登陆失败的界面;表单提交地址
        .loginPage("/login").defaultSuccessUrl("/index.html").failureUrl("/login?error=true")
        // 默认用户名键值,默认密码键值
        .usernameParameter("username").passwordParameter("password").permitAll().and().rememberMe()
        .tokenValiditySeconds(1209600).key("rememberme");
//        .and()
//        .logout().logoutUrl("").logoutSuccessUrl("/index.html").permitAll();
    }

}

在一般来看来,我设置了


// 任何用户都可以访问以"/resources/","/signup", 或者 "/about"开头的URL。
.antMatchers("/global/**","/static/**").permitAll()

或者是


    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/global/**");
    }
    

之后应该没有什么问题,就应该可以访问到了我们的资源。可是当你运行起demo之后,你会发现,世界并不是你想象的那个样子。你还太年轻。

你所要的静态资源还是加载不出来。后来发现,我们还需要去配置一下 SpringMVC 里的 addResourceHandlers 方法。


@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

        @Override
        protected void addViewControllers(ViewControllerRegistry registry) {
            // TODO Auto-generated method stub
            // 注册访问 /login 转向 page-login.html 页面
            registry.addViewController("/login").setViewName("page-login.html");
            super.addViewControllers(registry);
        }

        @Override
        protected void addResourceHandlers(ResourceHandlerRegistry registry) {
            // TODO Auto-generated method stub
            registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
            super.addResourceHandlers(registry);
        }
}

看起来,这次应该就可以了吧。 Run ...

可是还是太年轻。依旧没有加载到资源。

这个,这个就有点凌乱了。。。。

过了好久好久好久,睡了一觉起来。

原来是HTML出了问题。对,没有听错是 HTML 出了问题。

在加载 css 或者是 js 资源的时候,我们要写的更加标准一些。


<link href="/global/css/style.css" rel="stylesheet" type="text/css" />

<script src="/global/js/custom.min.js" type="text/javascript"></script>

而不是


<link href="/global/css/style.css"/>

<script src="/global/js/custom.min.js"></script>

原文地址:https://www.cnblogs.com/dowhile/p/One.html

时间: 2024-11-06 07:33:09

Spring Security 静态资源访问的相关文章

spring mvc官网下最新jar搭建框架-静态资源访问处理-注解-自动扫描

1.从官网下载spring相关jar http://spring.io/projects 点击SPRING FRAMEWORK 2.从GitHtb下载 3.向下滚动找到Downloading Artifacts 点击 4.点击Artifacts-->libs-release-local-->org-->springframewor-->spring 5.选中一个自己需要的版本(我选了4.2.5) 6.下载后的文件 配置文件的规范约束下面文件夹有的都可以写(我用到了beans, co

SpringMVC REST 风格静态资源访问配置

1 在web.xml中使用默认servlet处理静态资源,缺点是如果静态资源过多,则配置量会比较大,一旦有遗漏,则会造成资源无法正常显示或404错误. <!-- 静态资源访问控制 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-

spring mvc 静态资源 404问题

spring mvc 静态资源 404问题 在web.xml配置servlet-mapping的时候,如果url-pattern设置为"/" (如下),很多人都会遇到导入js,css,图片等静态资源出现Firefox调试窗口会报出的404错误,而你的确也不能访问那些资源 <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</u

spring mvc静态资源请求和&lt;mvc:annotation-driven&gt;

自己看了官方文档,也到网上查了下,目前理解如下: <mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter.即解决了@Controller注解的使用前提配置. <context:annotation-config/>是对包进行扫描,实现注释驱动Bean定义,同时将bean自动注入容器中使用.即解决了@C

Spring MVC静态资源处理——&lt;mvc:resources /&gt; ||&lt;mvc:default-servlet-handler /&gt; 转载

Spring MVC静态资源处理——<mvc:resources /> ||<mvc:default-servlet-handler /> mvcmvc:resources 优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往使用 *.do . *.xhtml等方式.这就决定了请求URL必须是一个带后缀的URL,而无法采用真正的REST

SpringBoot静态资源访问+拦截器+Thymeleaf模板引擎实现简单登陆

在此记录一下这十几天的学习情况,卡在模板引擎这里已经是四天了. 对Springboot的配置有一个比较深刻的认识,在此和大家分享一下初学者入门Spring Boot的注意事项,如果是初学SpringBoot,或者有意向学习Springboot的朋友,这篇文章可以简单的来帮助你,处理一些不必要的麻烦. 开发环境: IDea JDK1.8 SpringBoot2+ Maven3.5 1.配置Maven 首先我们打开IdeA我们从新建一个项目开始.SpringBoot是基于Maven来管理Jar包的.

springboot + thymeleaf静态资源访问404

在使用springboot 和thtmeleaf开发时引用静态资源404,静态资源结如下: index.html文件: <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset = "UFT-8" /> <title>Spring Boot Application</title> <lin

【SpringMVC】静态资源访问的问题

在项目中经常会用到一些静态的资源,而一般我们在配置SpringMVC时会让SpringMVC接管所有的请求(包括静态资源的访问), 那么我们怎样才能最简单的来配置静态资源的访问呢? 一,在web.xml中让SpringMVC接管所有请求 如图 二,在SpringMVC中配置静态资源映射路径 这句话的意思是将ccc这个文件夹的访问路径映射为javaScript 也就是说 我们在地址栏里面访问JavaScript下的某个图片,其实经过SpringMVC的处理后,访问的是ccc下的文件 例如我们要访问

Spring Boot 静态资源处理

spring Boot 默认的处理方式就已经足够了,默认情况下Spring Boot 使用WebMvcAutoConfiguration中配置的各种属性. 建议使用Spring Boot 默认处理方式,需要自己配置的地方可以通过配置文件修改. 但是如果你想完全控制Spring MVC,你可以在@Configuration注解的配置类上增加@EnableWebMvc,增加该注解以后WebMvcAutoConfiguration中配置就不会生效,你需要自己来配置需要的每一项.这种情况下的配置方法建议