怎樣進(jìn)行添加Spring-Security支持,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)公司,專注為中小企業(yè)提供官網(wǎng)建設(shè)、營銷型網(wǎng)站制作、響應(yīng)式網(wǎng)站設(shè)計(jì)、展示型網(wǎng)站設(shè)計(jì)、網(wǎng)站制作等服務(wù),幫助中小企業(yè)通過網(wǎng)站體現(xiàn)價(jià)值、有效益。幫助企業(yè)快速建站、解決網(wǎng)站建設(shè)與網(wǎng)站營銷推廣問題。
添加maven依賴:
添加配置:
新建包config:類SecurityConfig繼承于WebSecurityConfigurerAdapter.
configure(HttpSecurity http)方法:在該方法內(nèi)配置web路徑和對應(yīng)的權(quán)限
http.authorizeRequests().antMatchers(...):配置web路徑
permitAll(),.hasRole(),.hasAnyRole等:配置web路徑對應(yīng)的權(quán)限.
例如: .antMatchers("/manage/**").hasRole("ADMIN")
表示路徑/manage下的所有地址和資源,需要具有ROLE_ADMIN角色的用戶才能訪問.
.formLogin().loginPage("/login") // 指定了登錄頁面
.successForwardUrl("/sign_in").failureUrl("/sign_in")
指定spring-security認(rèn)證完成(成功/失敗)后回調(diào)的路徑(GET),該路徑通常是我們自己的controller方法,方法里可以定義登錄反饋,具體見項(xiàng)目代碼.
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/").permitAll(): 定義注銷的路徑,并且所有用戶都可訪問該方法.
configure(AuthenticationManagerBuilder auth):在該方法內(nèi)配置自定義的安全認(rèn)證類
auth.authenticationProvider(securityEncrypt):自定義認(rèn)證
auth.userDetailsService(customUserService):自定義認(rèn)證用戶信息服務(wù)
至此,路徑已經(jīng)具備安全特性了.下面介紹登錄認(rèn)證和用戶角色資源管理
登錄認(rèn)證流程:
SecurityConfig.configure:查找用戶認(rèn)證提供者->SecurityEncrypt
SecurityEncrypt.authenticate:認(rèn)證用戶憑證
CustomUserService.loadUserByUsername:加載用戶數(shù)據(jù)庫用戶信息
密碼匹配:
失敗:拋出認(rèn)證異常
成功:返回認(rèn)證用戶信息
實(shí)際項(xiàng)目中的密碼是經(jīng)過加密的,所以需要自定義認(rèn)證方案,本項(xiàng)目使用BCrypt加密方式,具體代碼見EncryptUtil工具類.
創(chuàng)建類: SecurityEncrypt,自定義認(rèn)證
authenticate(Authentication authentication):該方法將對用戶輸入信息進(jìn)行匹配
authentication.getName():用戶輸入的用戶名
authentication.getCredentials():用戶輸入的密碼
UserDetails user = userService.loadUserByUsername(username):通過用戶名加載數(shù)據(jù)庫用戶信息
認(rèn)證完成后(成功/失敗)回調(diào) /sign_in.
創(chuàng)建類: CustomUserService,自定義加載數(shù)據(jù)庫用戶信息,同時(shí)加載用戶的角色和角色對資源的訪問權(quán)限信息.
配置認(rèn)證完成后的操作:
principal:已認(rèn)證對象,null表示認(rèn)證失敗
SPRING_SECURITY_SAVED_REQUEST: spring-security保存到session中的屬性,保存了認(rèn)證前的頁面.如果該屬性不為null,可以傳遞給頁面讓js跳轉(zhuǎn),即實(shí)現(xiàn)了認(rèn)證后跳轉(zhuǎn)到認(rèn)證前的頁面.
配置某個方法的訪問權(quán)限:
@PreAuthorize:在方法執(zhí)行前將會檢查用戶是否具有對應(yīng)的權(quán)限,可選值:
Thymeleaf頁面中配置權(quán)限: hello.html
xmlns:sec="http://www.thymeleaf.org/extras/spring-security":導(dǎo)入security標(biāo)簽
sec:authorize="hasRole('USER')":顯示該對象需要具有該權(quán)限
在github項(xiàng)目中,我定義了兩個用戶角色和兩個資源訪問權(quán)限
角色(Roles):注意: spring-security中用戶角色默認(rèn)前綴是ROLE_,后面配置時(shí)不要加.
ROLE_USER:表示已登錄用戶,注冊用戶時(shí)自動賦予該角色
ROLE_ADMIN:目前項(xiàng)目中的最高權(quán)利角色
角色權(quán)限(Privilege)
user:*表示已注冊用戶資源訪問權(quán)限,對應(yīng)ROLE_USER
global:*表示最高權(quán)限,該類型用戶可以訪問所有資源,對應(yīng)ROLE_ADMIN
項(xiàng)目啟動時(shí)會自動初始化相關(guān)權(quán)限.
本項(xiàng)目添加了簡要的后臺管理,用以保存公眾號的文章信息。
看完上述內(nèi)容,你們掌握怎樣進(jìn)行添加Spring-Security支持的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)站名稱:怎樣進(jìn)行添加Spring-Security支持
分享路徑:http://jinyejixie.com/article24/ijjhje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、全網(wǎng)營銷推廣、網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)公司、App設(shè)計(jì)、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)