Spring Security permitAll()不允許匿名訪問(wèn)的操作
Spring Security permitAll()不允許匿名訪問(wèn)
修改前
http .addFilterBefore(muiltpartFilter, ChannelProcessingFilter.class) .addFilterBefore(cf, ChannelProcessingFilter.class) .authorizeRequests() .anyRequest() .authenticated() .and() .authorizeRequests() .antMatchers("/ping**") .permitAll() .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .logoutUrl("/logout") .logoutSuccessUrl("/login");
修改后
http .addFilterBefore(muiltpartFilter, ChannelProcessingFilter.class) .addFilterBefore(cf, ChannelProcessingFilter.class) .authorizeRequests() .antMatchers("/ping**") .permitAll() .and() .formLogin() .loginPage("/login") .permitAll() .and() .authorizeRequests() .anyRequest() .authenticated() .and() .logout() .logoutUrl("/logout") .logoutSuccessUrl("/login");
permitAll() 順序很重要,如同在 XML 配置中,即把 authorizeRequests().anyRequest().authenticate 放到最后
Spring Security @PreAuthorize 攔截?zé)o效
1. 在使用spring security的時(shí)候使用注解
@PreAuthorize("hasAnyRole('ROLE_Admin')")
放在對(duì)方法的訪問(wèn)權(quán)限進(jìn)行控制失效,其中配置如:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired UserDetailsService userDetailsService; @Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/res/**", "/login/login*").permitAll() .anyRequest().authenticated() .and().formLogin().loginPage("/login/login").defaultSuccessUrl("/") .passwordParameter("password") .usernameParameter("username") .and().logout().logoutSuccessUrl("/login/login"); } }
Controller中的方法如下:
@Controller @RequestMapping("/demo") public class DemoController extends CommonController{ @Autowired private UserService userService; @PreAuthorize("hasAnyRole('ROLE_Admin')") @RequestMapping(value = "user-list") public void userList() { } }
使用一個(gè)沒(méi)有ROLE_Admin權(quán)限的用戶(hù)去訪問(wèn)此方法發(fā)現(xiàn)無(wú)效。
修改一下 SecurityConfig:
@Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/res/**", "/login/login*").permitAll() .antMatchers("/demo/user-list").access("hasRole('ROLE_Admin')") .anyRequest().authenticated() .and().formLogin().loginPage("/login/login").defaultSuccessUrl("/") .passwordParameter("password") .usernameParameter("username") .and().logout().logoutSuccessUrl("/login/login"); }
添加上:
.antMatchers("/demo/user-list").access("hasRole('ROLE_Admin')")
可以被正常攔截,說(shuō)明是方法攔截沒(méi)有生效。
如果是基于xml,則需要在配置文件中加上:
<security:global-method-security pre-post-annotations="enabled" proxy-target-class="true" />
換成Annotation方式以后,則需要使用 @EnableGlobalMethodSecurity(prePostEnabled=true) 注解來(lái)開(kāi)啟。
并且需要提供以下方法:
@Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); }
才可正常攔截。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
用java實(shí)現(xiàn)斗地主發(fā)牌過(guò)程
這篇文章主要為大家詳細(xì)介紹了用java實(shí)現(xiàn)斗地主發(fā)牌過(guò)程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11SpringBoot之核心依賴(lài)和自動(dòng)配置方式
這篇文章主要介紹了SpringBoot之核心依賴(lài)和自動(dòng)配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06java實(shí)現(xiàn)圖片任意角度旋轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖片任意角度旋轉(zhuǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04java8 stream中Collectors.toMap空指針問(wèn)題及解決
這篇文章主要介紹了java8 stream中Collectors.toMap空指針問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Java的幾個(gè)重要版本_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
jdk8 將在2014年3月份發(fā)布,迄今為止,可能是最大更新的java版本,也是令人期待的一個(gè)版本,在Java中引入閉包概念對(duì)Java程序開(kāi)發(fā)方法的影響甚至?xí)笥贘ava5中引入的泛型特征對(duì)編程方式帶來(lái)的影響2017-06-06Java解析調(diào)用webservice服務(wù)的返回XML串詳解
這篇文章主要介紹了Java解析調(diào)用webservice服務(wù)的返回XML串詳解的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07javaweb實(shí)現(xiàn)投票系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了javaweb實(shí)現(xiàn)投票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09Spring?ComponentScan的掃描過(guò)程解析
這篇文章主要介紹了spring?ComponentScan的掃描過(guò)程解析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03