溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎樣進行添加Spring-Security支持

發(fā)布時間:2021-12-02 16:45:37 來源:億速云 閱讀:329 作者:柒染 欄目:大數(shù)據(jù)

怎樣進行添加Spring-Security支持,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

添加maven依賴:

怎樣進行添加Spring-Security支持

添加配置

新建包config: SecurityConfig繼承于WebSecurityConfigurerAdapter.

怎樣進行添加Spring-Security支持

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認證完成(成功/失敗)后回調(diào)的路徑(GET),該路徑通常是我們自己的controller方法,方法里可以定義登錄反饋,具體見項目代碼.

    .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/").permitAll(): 定義注銷的路徑,并且所有用戶都可訪問該方法.

configure(AuthenticationManagerBuilder auth): 在該方法內(nèi)配置自定義的安全認證類

    auth.authenticationProvider(securityEncrypt): 自定義認證

    auth.userDetailsService(customUserService): 自定義認證用戶信息服務(wù)

至此,路徑已經(jīng)具備安全特性了.下面介紹登錄認證和用戶角色資源管理

登錄認證流程

    SecurityConfig.configure: 查找用戶認證提供者->SecurityEncrypt

    SecurityEncrypt.authenticate: 認證用戶憑證

        CustomUserService.loadUserByUsername: 加載用戶數(shù)據(jù)庫用戶信息

        密碼匹配:

            失敗: 拋出認證異常

            成功: 返回認證用戶信息

實際項目中的密碼是經(jīng)過加密的,所以需要自定義認證方案,本項目使用BCrypt加密方式,具體代碼見EncryptUtil工具類.

創(chuàng)建類: SecurityEncrypt,自定義認證

怎樣進行添加Spring-Security支持

authenticate(Authentication authentication): 該方法將對用戶輸入信息進行匹配

    authentication.getName(): 用戶輸入的用戶名

    authentication.getCredentials(): 用戶輸入的密碼

    UserDetails user = userService.loadUserByUsername(username): 通過用戶名加載數(shù)據(jù)庫用戶信息

    認證完成后(成功/失敗)回調(diào) /sign_in.

創(chuàng)建類: CustomUserService,自定義加載數(shù)據(jù)庫用戶信息,同時加載用戶的角色和角色對資源的訪問權(quán)限信息.

怎樣進行添加Spring-Security支持

配置認證完成后的操作:

怎樣進行添加Spring-Security支持

principal: 已認證對象,null表示認證失敗

SPRING_SECURITY_SAVED_REQUEST: spring-security保存到session中的屬性,保存了認證前的頁面.如果該屬性不為null,可以傳遞給頁面讓js跳轉(zhuǎn),即實現(xiàn)了認證后跳轉(zhuǎn)到認證前的頁面.

配置某個方法的訪問權(quán)限:

怎樣進行添加Spring-Security支持

@PreAuthorize: 在方法執(zhí)行前將會檢查用戶是否具有對應(yīng)的權(quán)限,可選值:

怎樣進行添加Spring-Security支持

Thymeleaf頁面中配置權(quán)限: hello.html

怎樣進行添加Spring-Security支持

xmlns:sec="http://www.thymeleaf.org/extras/spring-security": 導(dǎo)入security標簽

sec:authorize="hasRole('USER')": 顯示該對象需要具有該權(quán)限

github項目中,我定義了兩個用戶角色和兩個資源訪問權(quán)限

角色(Roles): 注意: spring-security中用戶角色默認前綴是ROLE_,后面配置時不要加.

怎樣進行添加Spring-Security支持

ROLE_USER: 表示已登錄用戶,注冊用戶時自動賦予該角色

ROLE_ADMIN: 目前項目中的最高權(quán)利角色

角色權(quán)限(Privilege)

怎樣進行添加Spring-Security支持

user:* 表示已注冊用戶資源訪問權(quán)限,對應(yīng)ROLE_USER

global:* 表示最高權(quán)限,該類型用戶可以訪問所有資源,對應(yīng)ROLE_ADMIN

項目啟動時會自動初始化相關(guān)權(quán)限.

本項目添加了簡要的后臺管理,用以保存公眾號的文章信息。

看完上述內(nèi)容,你們掌握怎樣進行添加Spring-Security支持的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI