十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
如何實(shí)現(xiàn)SpringSecurity的認(rèn)證和授權(quán)針對(duì)這個(gè)問(wèn)題,今天小編總結(jié)這篇有關(guān)SpringSecurity的文章,希望能幫助更多想解決這個(gè)問(wèn)題的朋友找到更加簡(jiǎn)單易行的辦法。
創(chuàng)新互聯(lián)建站專(zhuān)注于昌都企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站建設(shè)。昌都網(wǎng)站建設(shè)公司,為昌都等地區(qū)提供建站服務(wù)。全流程專(zhuān)業(yè)公司,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
在pom中的基礎(chǔ)上增加spring Security的依賴(lài):
<dependency>
<groupId>org.springframework.securitygroupId>
<artifactId>spring-security-webartifactId>
<version>5.0.1.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.securitygroupId>
<artifactId>spring-security-configartifactId>
<version>5.0.1.RELEASEversion>
dependency>
@Configuration
@ComponentScan(basePackages ="cn.xh"
,excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value =Controller.class)})
public classApplicationConfig {
//在此配置除了Controller的其它bean,比如:數(shù)據(jù)庫(kù)鏈接池、事務(wù)管理器、業(yè)務(wù)bean等。
}
(basePackages = ,includeFilters = {(type = FilterType.,value = .)}) WebConfig WebMvcConfigurer { InternalResourceViewResolver viewResolver(){ InternalResourceViewResolver viewResolver = InternalResourceViewResolver(); viewResolver.setPrefix(); viewResolver.setSuffix(); viewResolver; } }
在init包下定義spring容器的初始化類(lèi)SpringApplicationInitializer,此類(lèi)實(shí)現(xiàn)WebApplicationInitializer接口,spring容器啟動(dòng)時(shí)加載WebApplicationInitializer接口的所有實(shí)現(xiàn)類(lèi):
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方法返回一個(gè)UserDetailsService對(duì)象,spring security從這里獲取用戶(hù)的信息,這里創(chuàng)建了兩個(gè)用戶(hù)zhangsan和lisi并設(shè)置了他們的密碼和權(quán)限。
Configure方法配置了/r/**的資源經(jīng)過(guò)認(rèn)證后才能訪問(wèn),支持form表單認(rèn)證,認(rèn)證成功后跳轉(zhuǎn)到login‐success
修改SpringApplicationInitializer的getRootConfigClasses()方法,添加WebSecurityConfig.class:
Class>[] getRootConfigClasses() { Class>[] { ApplicationConfig.,WebSecurityConfig.}; }
如果當(dāng)前環(huán)境沒(méi)有使用spring或spring mvc,則需要將WebSecurityConfig傳入超類(lèi),以獲取配置并創(chuàng)建spring context
public classSpringSecurityApplicationInitializerextendsAbstractSecurityWebApplicationInitializer {
publicSpringSecurityApplicationInitializer() {
//super(WebSecurityConfig.class);
}
}
在WebConfig.java中添加默認(rèn)請(qǐng)求根路徑跳轉(zhuǎn)到/login,此url為spring security提供:
addViewControllers(ViewControllerRegistry registry) { registry.addViewController().setViewName(); }
LoginController { (value = ,produces = {}) String loginSuccess(){ ; } }
在LoginController中添加”/r/r1”或”/r/r2”
在spring security配置類(lèi):WebSecurityConfig.java中配置授權(quán)規(guī)則:
.antMatchers("/r/r1").hasAuthority("p1")
.antMatchers().hasAuthority()
@Override
protected voidconfigure(HttpSecurity http)throwsException {
http.authorizeRequests()
.antMatchers("/r/r1").hasAuthority("p1")
.antMatchers("/r/r2").hasAuthority("p2")
.antMatchers("/r/**").authenticated()//所有/r/**的請(qǐng)求必須認(rèn)證通過(guò)
.anyRequest().permitAll()//除了/r/**,其它的請(qǐng)求可以訪問(wèn)
.and()
.formLogin()//允許表單登錄
.successForwardUrl("/login-success");//自定義登錄成功的頁(yè)面地址
}
關(guān)于SpringSecurity的認(rèn)證和授權(quán)的實(shí)現(xiàn)過(guò)程就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果喜歡這篇文章,不如把它分享出去讓更多的人看到。