解決使用security和靜態(tài)資源被攔截的問題
使用security和靜態(tài)資源被攔截
之前的博客中我給過如何在springboot中整合security,當(dāng)時寫的界面很簡單,沒有CSS樣式,更談不上靜態(tài)資源,而現(xiàn)在在實際開發(fā)過程中經(jīng)理讓我們用security來開發(fā),界面肯定不可能就是兩個輸入框,一個按鈕就完事啊,當(dāng)加上CSS樣式的時候問題就來了。
首先是CSS樣式?jīng)]辦法被加載,其次登錄之后跳轉(zhuǎn)的路徑出錯,隨機跳轉(zhuǎn)到一個CSS文件中,這讓我很煩惱,查了很多資料,也問了很多前輩之后終于解決了這個問題。
解決方法
下面我給出具體的代碼
@Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ @Autowired private UserDetailsServiceImpl uds; protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/login","/css/**","/image/*").permitAll() .anyRequest().authenticated().and().formLogin() .loginPage("/login").defaultSuccessUrl("/index").permitAll().and().logout().permitAll(); } public void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(uds); } }
上面給出了不被攔截的一些靜態(tài)資源的路徑 **表示可以跨文件夾
Spring Security踩坑記錄(靜態(tài)資源放行異常)
問題描述
今天使用springboot整合springsecurity,出現(xiàn)靜態(tài)資源404的狀態(tài)
解決
1.首先嘗試使用網(wǎng)上的方法繼承 WebSecurityConfigurerAdapter
然后重寫public void configure(WebSecurity web)
@Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers(loadExcludePath()); } private String[] loadExcludePath() { return new String[]{ "/", "/static/**", "/templates/**", "/img/**", "/js/**", "/css/**", "/lib/**" }; }
照道理說。這應(yīng)該就可以了,然而我這里就是不能成功放行
2.于是我又重寫了方法 protected void configure(HttpSecurity http)
@Override protected void configure(HttpSecurity http) throws Exception { http //關(guān)閉跨域限制 .csrf().disable() .authorizeRequests() //在此處放行 .antMatchers(loadExcludePath()).permitAll() .anyRequest().authenticated()//其他的路徑都是登錄后即可訪問 .and() .formLogin() // .loginPage("/login") // .loginProcessingUrl("/doLogin") .successHandler(getAuthenticationSuccessHandler()) .failureHandler(getAuthenticationFailureHandler()) // .permitAll() .and() .logout() .permitAll() .and() .exceptionHandling().accessDeniedHandler(getAccessDeniedHandler()); }
這里的重點是下面幾句(其他的配置可以忽略)
http
//關(guān)閉跨域限制
.csrf().disable()
.authorizeRequests()
//在此處放行
.antMatchers(loadExcludePath()).permitAll()
.anyRequest().authenticated()//其他的路徑都是登錄后即可訪問
然而盡管標(biāo)紅的地方也進行了放行,可是依然失敗。
到目前為止,應(yīng)該是已經(jīng)沒問題了,畢竟兩個方法中都進行了放行,可是靜態(tài)資源依舊404
3.最終發(fā)現(xiàn)是跨域配置和springsecurity產(chǎn)生了沖突
也就是我項目中在其他位置配置了跨域的內(nèi)容,如下
@Configuration public class CORSConfiguration extends WebMvcConfigurationSupport { @Override protected void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS") .allowedHeaders("*") .exposedHeaders( "access-control-allow-headers", "access-control-allow-methods", "access-control-allow-origin", "access-control-max-age", "X-Frame-Options") .allowCredentials(true) .maxAge(3600); super.addCorsMappings(registry); } }
把 CORSConfiguration 注釋掉,最終問題解決~
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot升級3.2報錯Invalid value type for
這篇文章給大家介紹了SpringBoot升級3.2報錯Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String的解決方案,文中有詳細的原因分析,需要的朋友可以參考下2023-12-12SpringCloud Zuul實現(xiàn)負載均衡和熔斷機制方式
這篇文章主要介紹了SpringCloud Zuul實現(xiàn)負載均衡和熔斷機制方式,具有很好的參考價值,希望對大家有所幫助。2021-07-07Java關(guān)于后端怎么去接收Date、LocalDateTime類型的參數(shù)詳解
這篇文章主要介紹了java關(guān)于后端怎么去接收Date、LocalDateTime類型的參數(shù),文中有詳細的代碼流程,對我們學(xué)習(xí)或工作有一定的參考價值,需要的朋友可以參考下2023-06-06Spring中如何使用@Value注解實現(xiàn)給Bean屬性賦值
這篇文章主要介紹了Spring中如何使用@Value注解實現(xiàn)給Bean屬性賦值的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08java微信企業(yè)號開發(fā)之發(fā)送消息(文本、圖片、語音)
這篇文章主要為大家詳細介紹了java微信企業(yè)號開發(fā)之發(fā)送消息,發(fā)送類型包括文本、圖片、語音,感興趣的小伙伴們可以參考一下2016-06-06mybatis-plus分頁如何接收前端參數(shù)limit和page
這篇文章主要介紹了mybatis-plus分頁如何接收前端參數(shù)limit和page,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01JAVA中通過Redis實現(xiàn)延時任務(wù)demo實例
Redis在2.0版本時引入了發(fā)布訂閱(pub/sub)功能,在發(fā)布訂閱中有一個channel(頻道),與消息隊列中的topic(主題)類似,可以通過redis的發(fā)布訂閱者模式實現(xiàn)延時任務(wù)功能,實例中會議室預(yù)約系統(tǒng),用戶預(yù)約管理員審核后生效,如未審批,需要自動變超期未處理,使用延時任務(wù)2024-08-08SpringBoot業(yè)務(wù)邏輯異常的處理方法介紹
本篇文章為大家展示了如何在SpringBoot中統(tǒng)一處理邏輯異常,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲2022-09-09