最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot中如何去整合shrio實(shí)例分享

 更新時(shí)間:2023年08月17日 08:34:20   作者:空慧居士  
這篇文章主要介紹了springboot中如何去整合shrio實(shí)例分享的相關(guān)資料,需要的朋友可以參考下

背景:

上文學(xué)習(xí)了shrio 基本概念后,本章將進(jìn)一步的落地實(shí)踐學(xué)習(xí),在springboot中如何去整合shrio,整個(gè)過程步驟有個(gè)清晰的了解。

利用Shiro進(jìn)行登錄認(rèn)證主要步驟:

1. 添加依賴:首先,在pom.xml文件中添加Spring Boot和Shiro的相關(guān)依賴。

<!-- Spring Boot -->
<dependency>
????<groupId>org.springframework.boot</groupId>
????<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Shiro -->
<dependency>
????<groupId>org.apache.shiro</groupId>
????<artifactId>shiro-spring-boot-starter</artifactId>
????<version>1.7.1</version>
</dependency>

2. 創(chuàng)建Shiro配置類:創(chuàng)建一個(gè)ShiroConfig類,用于配置Shiro的相關(guān)信息和組件。(對于配置的解釋和作用見第三章雜談

@Configuration
public?class?ShiroConfig {
????// 配置安全管理器
????@Bean
????public?DefaultWebSecurityManager securityManager() {
????????DefaultWebSecurityManager securityManager =?new?DefaultWebSecurityManager();
????????securityManager.setRealm(myRealm());
????????return?securityManager;
????}
????// 配置自定義Realm
????@Bean
????public?MyRealm myRealm() {
????????return?new?MyRealm();
????}
????// 配置Shiro過濾器
????@Bean
????public?ShiroFilterFactoryBean shiroFilterFactoryBean() {
????????ShiroFilterFactoryBean shiroFilterFactoryBean =?new?ShiroFilterFactoryBean();
????????shiroFilterFactoryBean.setSecurityManager(securityManager());
????????shiroFilterFactoryBean.setLoginUrl("/login");?// 設(shè)置登錄頁面
????????shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorized");?// 設(shè)置未授權(quán)頁面
????????Map<String, String> filterChainDefinitionMap =?new?LinkedHashMap<>();
????????// 允許匿名訪問的路徑
????????filterChainDefinitionMap.put("/login",?"anon");
????????filterChainDefinitionMap.put("/static/**",?"anon");
????????// 需要認(rèn)證才能訪問的路徑
????????filterChainDefinitionMap.put("/**",?"authc");
????????shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
????????return?shiroFilterFactoryBean;
????}
}

 3. 創(chuàng)建自定義Realm:創(chuàng)建一個(gè)MyRealm類,繼承AuthorizingRealm并實(shí)現(xiàn)相關(guān)方法,用于處理認(rèn)證和授權(quán)邏輯

public?class?MyRealm?extends?AuthorizingRealm {
????// 處理認(rèn)證邏輯
????@Override
????protected?AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)?throws?AuthenticationException {
????????// 從token中獲取用戶名
????????String username = (String) authenticationToken.getPrincipal();
????????// 模擬從數(shù)據(jù)庫或其他存儲(chǔ)中獲取用戶信息
????????// 例如,從數(shù)據(jù)庫中查詢用戶信息并返回
????????String dbPassword =?"123456";?// 假設(shè)從數(shù)據(jù)庫中查詢的密碼是123456
????????// 返回認(rèn)證信息,包括用戶名和密碼
????????return?new?SimpleAuthenticationInfo(username, dbPassword, getName());
????}
????// 處理授權(quán)邏輯
????@Override
????protected?AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
????????// 從PrincipalCollection中獲取用戶名
????????String username = (String) principalCollection.getPrimaryPrincipal();
????????// 模擬從數(shù)據(jù)庫或其他存儲(chǔ)中獲取用戶角色和權(quán)限信息
????????// 例如,從數(shù)據(jù)庫中查詢用戶對應(yīng)的角色和權(quán)限并返回
????????Set<String> roles =?new?HashSet<>();
????????roles.add("admin");?// 假設(shè)用戶擁有admin角色
????????Set<String> permissions =?new?HashSet<>();
????????permissions.add("user:read");?// 假設(shè)用戶擁有user:read權(quán)限
????????// 創(chuàng)建授權(quán)信息
????????SimpleAuthorizationInfo authorizationInfo =?new?SimpleAuthorizationInfo();
????????authorizationInfo.setRoles(roles);
????????authorizationInfo.setStringPermissions(permissions);
????????return?authorizationInfo;
????}
}

4. 創(chuàng)建登錄接口和登錄頁面:創(chuàng)建一個(gè)登錄接口處理用戶的登錄請求

@Controller
public?class?LoginController {
????@GetMapping("/login")
????public?String login() {
????????return?"login";
????}
????@PostMapping("/login")
????public?String doLogin(String username, String password) {
????????// 執(zhí)行登錄邏輯
????????Subject currentUser = SecurityUtils.getSubject();
????????UsernamePasswordToken token = new?UsernamePasswordToken(username, password);
????????try?{
????????????currentUser.login(token); // 執(zhí)行登錄
????????????return?"redirect:/home"; // 登錄成功后跳轉(zhuǎn)到首頁
????????} catch?(AuthenticationException e) {
????????????return?"redirect:/login-error"; // 登錄失敗后跳轉(zhuǎn)到錯(cuò)誤頁面
????????}
????}
}

整體的執(zhí)行流程:

  • 用戶在瀏覽器中訪問登錄頁面,輸入用戶名和密碼,并點(diǎn)擊登錄按鈕。

  • Controller層的LoginController類中的doLogin方法被調(diào)用,該方法接收用戶名和密碼作為參數(shù)。

  • 創(chuàng)建一個(gè)Subject對象,該對象代表當(dāng)前正在與應(yīng)用程序交互的用戶。

  • 創(chuàng)建一個(gè)UsernamePasswordToken對象,將用戶名和密碼設(shè)置為該對象的屬性。

  • 調(diào)用Subject對象的login方法,將UsernamePasswordToken對象作為參數(shù)傳遞進(jìn)去。

  • Subject對象將UsernamePasswordToken對象傳遞給Shiro進(jìn)行認(rèn)證。

  • Shiro框架會(huì)調(diào)用MyRealm類中的doGetAuthenticationInfo方法,該方法用于處理認(rèn)證邏輯。

  • doGetAuthenticationInfo方法中,從UsernamePasswordToken對象中獲取用戶名。

  • 可以根據(jù)需要,從數(shù)據(jù)庫或其他存儲(chǔ)中獲取與用戶名對應(yīng)的用戶信息,例如密碼等。

  • 將獲取到的用戶信息與UsernamePasswordToken對象中的密碼進(jìn)行比較,判斷用戶是否通過認(rèn)證。

  • 如果認(rèn)證成功,創(chuàng)建一個(gè)SimpleAuthenticationInfo對象,將用戶名、數(shù)據(jù)庫中的密碼和Realm名稱作為參數(shù)傳遞給它。

  • SimpleAuthenticationInfo對象會(huì)被返回給Shiro框架,表示認(rèn)證成功。

  • Shiro框架會(huì)將認(rèn)證成功的信息保存在Subject對象中。

  • 如果認(rèn)證失敗,將拋出AuthenticationException異常。

  • doLogin方法中,通過捕獲AuthenticationException異常,可以處理登錄失敗的情況,例如重定向到登錄失敗頁面。

  • 如果登錄成功,可以根據(jù)需要執(zhí)行一些操作,例如重定向到首頁或其他需要登錄后才能訪問的頁面。

總結(jié)起來,整個(gè)執(zhí)行流程如下:

  • 用戶輸入用戶名和密碼,并提交登錄表單。
  • Controller層的LoginController類中的doLogin方法接收到登錄請求。
  • 創(chuàng)建Subject對象,代表當(dāng)前用戶。
  • 創(chuàng)建UsernamePasswordToken對象,將用戶名和密碼設(shè)置為其屬性。
  • 調(diào)用Subject對象的login方法,將UsernamePasswordToken對象作為參數(shù)傳入。
  • Shiro框架調(diào)用MyRealm類中的doGetAuthenticationInfo方法,處理認(rèn)證邏輯。
  • doGetAuthenticationInfo方法中,獲取用戶名和密碼,并與數(shù)據(jù)庫中的信息進(jìn)行比較。
  • 如果認(rèn)證成功,返回一個(gè)SimpleAuthenticationInfo對象,表示認(rèn)證通過。
  • 如果認(rèn)證失敗,拋出AuthenticationException異常。
  • doLogin方法中,根據(jù)認(rèn)證結(jié)果執(zhí)行相應(yīng)的操作,例如重定向到登錄成功頁面或登錄失敗頁面。

到此這篇關(guān)于springboot中如何去整合shrio實(shí)例分享的文章就介紹到這了,更多相關(guān)springboot整合shrio內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringCloud Feign Jackson自定義配置方式

    SpringCloud Feign Jackson自定義配置方式

    這篇文章主要介紹了SpringCloud Feign Jackson自定義配置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 微信小程序獲取手機(jī)號(hào),后端JAVA解密流程代碼

    微信小程序獲取手機(jī)號(hào),后端JAVA解密流程代碼

    這篇文章主要介紹了微信小程序獲取手機(jī)號(hào),后端JAVA解密流程的代碼,幫助大家更好的利用Java開發(fā),感興趣的朋友可以了解下
    2020-09-09
  • IP查詢系統(tǒng)的異步回調(diào)案例

    IP查詢系統(tǒng)的異步回調(diào)案例

    本文主要分享了IP查詢系統(tǒng)的異步回調(diào)案例,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • SpringBoot全局異常處理方式

    SpringBoot全局異常處理方式

    本文詳細(xì)介紹了Spring?Boot中異常處理的多種方案,包括基于請求轉(zhuǎn)發(fā)、異常處理器、過濾器等方式,并對其特點(diǎn)、實(shí)現(xiàn)方式和適用場景進(jìn)行了詳細(xì)介紹,作者推薦了基于請求轉(zhuǎn)發(fā)和異常處理器+請求轉(zhuǎn)發(fā)補(bǔ)充的方案,認(rèn)為它們能實(shí)現(xiàn)統(tǒng)一的全局異常處理,并能自定義統(tǒng)一響應(yīng)信息格式
    2024-12-12
  • 利用spring-data-redis實(shí)現(xiàn)incr自增的操作

    利用spring-data-redis實(shí)現(xiàn)incr自增的操作

    這篇文章主要介紹了利用spring-data-redis實(shí)現(xiàn)incr自增的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Java volatile的幾種使用場景分析

    Java volatile的幾種使用場景分析

    volatile 是一種輕量級(jí)的同步機(jī)制,它能保證共享變量的可見性,同時(shí)禁止重排序保證了操作的有序性,但是它無法保證原子性,本文給大家總結(jié)了Java olatile的使用場景有哪些,并通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Java多線程并發(fā)JUC包ReentrantLock顯示鎖的用法

    Java多線程并發(fā)JUC包ReentrantLock顯示鎖的用法

    這篇文章主要介紹了Java多線程并發(fā)JUC包ReentrantLock顯示鎖的用法,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Spring?MVC數(shù)據(jù)綁定方式

    Spring?MVC數(shù)據(jù)綁定方式

    這篇文章主要介紹了Spring?MVC數(shù)據(jù)綁定方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • java線程安全鎖ReentrantReadWriteLock原理分析readLock

    java線程安全鎖ReentrantReadWriteLock原理分析readLock

    這篇文章主要為大家介紹了java線程安全鎖ReentrantReadWriteLock原理分析readLock,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • feign的ribbon超時(shí)配置和hystrix的超時(shí)配置說明

    feign的ribbon超時(shí)配置和hystrix的超時(shí)配置說明

    這篇文章主要介紹了feign的ribbon超時(shí)配置和hystrix的超時(shí)配置說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評(píng)論

鄂州市| 竹溪县| 莆田市| 平和县| 资阳市| 喀什市| 南部县| 咸丰县| 姚安县| 利川市| 赣榆县| 安顺市| 特克斯县| 安新县| 绵阳市| 米脂县| 涞水县| 屏东县| 兰溪市| 外汇| 田东县| 邛崃市| 平潭县| 湟源县| 罗田县| 宁德市| 西贡区| 陕西省| 达拉特旗| 达拉特旗| 阜阳市| 襄城县| 黑水县| 疏勒县| 乐都县| 玛曲县| 内丘县| 河南省| 梁山县| 乐清市| 友谊县|