您好,登錄后才能下訂單哦!
如何實現SpringSecurity的認證和授權針對這個問題,今天小編總結這篇有關SpringSecurity的文章,希望能幫助更多想解決這個問題的朋友找到更加簡單易行的辦法。
在pom中的基礎上增加spring Security的依賴:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
@Configuration
@ComponentScan(basePackages = "cn.xh"
,excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = Controller.class)})
public class ApplicationConfig {
//在此配置除了Controller的其它bean,比如:數據庫鏈接池、事務管理器、業務bean等。
}
(basePackages = ,includeFilters = {(type = FilterType.,value = .)}) WebConfig WebMvcConfigurer { InternalResourceViewResolver viewResolver(){ InternalResourceViewResolver viewResolver = InternalResourceViewResolver(); viewResolver.setPrefix(); viewResolver.setSuffix(); viewResolver; } }
在init包下定義spring容器的初始化類SpringApplicationInitializer,此類實現WebApplicationInitializer接口,spring容器啟動時加載WebApplicationInitializer接口的所有實現類:
SpringApplicationInitializer AbstractAnnotationConfigDispatcherServletInitializer { Class<?>[] getRootConfigClasses() { Class<?>[] { ApplicationConfig.}; } Class<?>[] getServletConfigClasses() { Class<?>[] { WebConfig.}; }
String[] getServletMappings() { String [] {}; } }
@EnableWebSecurity
WebSecurityConfig WebSecurityConfigurerAdapter { UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = InMemoryUserDetailsManager(); manager.createUser(User.().password().authorities().build()); manager.createUser(User.().password().authorities().build()); manager; } PasswordEncoder passwordEncoder() { NoOpPasswordEncoder.(); } configure(HttpSecurity http) Exception { http.authorizeRequests().antMatchers().authenticated().anyRequest().permitAll().and().formLogin().successForwardUrl(); } }
userDetailsService方法返回一個UserDetailsService對象,spring security從這里獲取用戶的信息,這里創建了兩個用戶zhangsan和lisi并設置了他們的密碼和權限。
Configure方法配置了/r/**的資源經過認證后才能訪問,支持form表單認證,認證成功后跳轉到login‐success
修改SpringApplicationInitializer的getRootConfigClasses()方法,添加WebSecurityConfig.class:
Class<?>[] getRootConfigClasses() { Class<?>[] { ApplicationConfig.,WebSecurityConfig.}; }
如果當前環境沒有使用spring或spring mvc,則需要將WebSecurityConfig傳入超類,以獲取配置并創建spring context
public class SpringSecurityApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
public SpringSecurityApplicationInitializer() {
//super(WebSecurityConfig.class);
}
}
在WebConfig.java中添加默認請求根路徑跳轉到/login,此url為spring security提供:
addViewControllers(ViewControllerRegistry registry) { registry.addViewController().setViewName(); }
LoginController { (value = ,produces = {}) String loginSuccess(){ ; } }
在LoginController中添加”/r/r1”或”/r/r2”
在spring security配置類:WebSecurityConfig.java中配置授權規則:
.antMatchers("/r/r1").hasAuthority("p1")
.antMatchers().hasAuthority()
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/r/r1").hasAuthority("p1")
.antMatchers("/r/r2").hasAuthority("p2")
.antMatchers("/r/**").authenticated()//所有/r/**的請求必須認證通過
.anyRequest().permitAll()//除了/r/**,其它的請求可以訪問
.and()
.formLogin()//允許表單登錄
.successForwardUrl("/login-success");//自定義登錄成功的頁面地址
}
關于SpringSecurity的認證和授權的實現過程就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果喜歡這篇文章,不如把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。