日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

基于spring boot 2和shiro實(shí)現(xiàn)身份驗(yàn)證案例

瀏覽:176日期:2023-09-09 14:07:15

Shiro是一個(gè)功能強(qiáng)大且易于使用的Java安全框架,官網(wǎng):https://shiro.apache.org/。

主要功能有身份驗(yàn)證、授權(quán)、加密和會(huì)話管理。

其它特性有Web支持、緩存、測(cè)試支持、允許一個(gè)用戶用另一個(gè)用戶的身份進(jìn)行訪問、記住我。

基于spring boot 2和shiro實(shí)現(xiàn)身份驗(yàn)證案例

Shiro有三個(gè)核心組件:Subject,SecurityManager和 Realm。

基于spring boot 2和shiro實(shí)現(xiàn)身份驗(yàn)證案例

Subject:即當(dāng)前操作“用戶”,“用戶”并不僅僅指人,也可以是第三方進(jìn)程、后臺(tái)帳戶或其他類似事物。

SecurityManager:安全管理器,Shiro框架的核心,通過SecurityManager來(lái)管理所有Subject,并通過它來(lái)提供安全管理的各種服務(wù)。

Realm:域,充當(dāng)了Shiro與應(yīng)用安全數(shù)據(jù)間的“橋梁”或者“連接器”。也就是說(shuō),當(dāng)對(duì)用戶執(zhí)行認(rèn)證(登錄)和授權(quán)(訪問控制)驗(yàn)證時(shí),Shiro會(huì)從應(yīng)用配置的Realm中查找用戶及其權(quán)限信息。當(dāng)配置Shiro時(shí),必須至少指定一個(gè)Realm,用于認(rèn)證和(或)授權(quán)。

Spring Boot 中整合Shiro,根據(jù)引入的依賴包shiro-spring和shiro-spring-boot-web-starter(當(dāng)前版本都是1.4.2)不同有兩種不同方法。

方法一:引入依賴包shiro-spring

1、IDEA中創(chuàng)建一個(gè)新的SpringBoot項(xiàng)目,pom.xml引用的依賴包如下:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.4.2</version> </dependency>

2、創(chuàng)建Realm和配置shiro

(1)創(chuàng)建Realm

package com.example.demo.config;import org.apache.shiro.authc.*;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.realm.AuthorizingRealm;import org.apache.shiro.subject.PrincipalCollection;public class MyRealm extends AuthorizingRealm { /**權(quán)限信息,暫不實(shí)現(xiàn)*/ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { return null; } /**身份認(rèn)證:驗(yàn)證用戶輸入的賬號(hào)和密碼是否正確。*/ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { //獲取用戶輸入的賬號(hào) String userName = (String) token.getPrincipal(); //驗(yàn)證用戶admin和密碼123456是否正確 if (!'admin'.equals(userName)) { throw new UnknownAccountException('賬戶不存在!'); } SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(userName, '123456', getName()); return authenticationInfo; //實(shí)際項(xiàng)目中,上面賬號(hào)從數(shù)據(jù)庫(kù)中獲取用戶對(duì)象,再判斷是否存在 /*User user = userService.findByUserName(userName); if (user == null) { throw new UnknownAccountException('賬戶不存在!'); } SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user,user.getPassword(), getName()); return authenticationInfo; */ }}

(2)配置Shiro

package com.example.demo.config;import org.apache.shiro.spring.web.ShiroFilterFactoryBean;import org.apache.shiro.web.mgt.DefaultWebSecurityManager;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.util.LinkedHashMap;import java.util.Map;@Configurationpublic class ShiroConfig { @Bean MyRealm myRealm() { return new MyRealm(); } @Bean DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager manager = new DefaultWebSecurityManager(); manager.setRealm(myRealm()); return manager; } @Bean ShiroFilterFactoryBean shiroFilterFactoryBean() { ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean(); bean.setSecurityManager(securityManager()); //如果不設(shè)置默認(rèn)會(huì)自動(dòng)尋找Web工程根目錄下的'/login.jsp'頁(yè)面 bean.setLoginUrl('/login'); //登錄成功后要跳轉(zhuǎn)的鏈接 bean.setSuccessUrl('/index'); //未授權(quán)界面 bean.setUnauthorizedUrl('/403'); //配置不會(huì)被攔截的鏈接 Map<String, String> map = new LinkedHashMap<>(); map.put('/doLogin', 'anon'); map.put('/**', 'authc'); bean.setFilterChainDefinitionMap(map); return bean; }}

3、控制器測(cè)試方法

package com.example.demo.controller;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.UnknownAccountException;import org.apache.shiro.authc.UsernamePasswordToken;import org.apache.shiro.subject.Subject;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class LoginController { @GetMapping('/login') public String login() { return '登錄頁(yè)面...'; } @PostMapping('/doLogin') public String doLogin(String userName, String password) { Subject subject = SecurityUtils.getSubject(); try { subject.login(new UsernamePasswordToken(userName, password)); return '登錄成功!'; } catch (UnknownAccountException e) { return e.getMessage(); } catch (AuthenticationException e) { return '登陸失敗,密碼錯(cuò)誤!'; } } //如果沒有先登陸,訪問會(huì)跳到/login @GetMapping('/index') public String index() { return 'index'; } @GetMapping('/403') public String unauthorizedRole(){ return '沒有權(quán)限'; }}

方法二:引入依賴包shiro-spring-boot-web-starter

1、pom.xml中刪除shiro-spring,引入shiro-spring-boot-web-starter

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.4.2</version> </dependency>

2、創(chuàng)建Realm和配置shiro

(1)創(chuàng)建Realm,代碼和方法一的一樣。

(2)配置Shiro

package com.example.demo.config;import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition;import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition;import org.apache.shiro.web.mgt.DefaultWebSecurityManager;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class ShiroConfig { @Bean MyRealm myRealm() { return new MyRealm(); } @Bean DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager manager = new DefaultWebSecurityManager(); manager.setRealm(myRealm()); return manager; } @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition definition = new DefaultShiroFilterChainDefinition(); definition.addPathDefinition('/doLogin', 'anon'); definition.addPathDefinition('/**', 'authc'); return definition; }}

(3)application.yml配置

shiro: unauthorizedUrl: /403 successUrl: /index loginUrl: /login

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲免费毛片| 亚洲高清二区| 日韩大片在线播放| 麻豆视频一区| 老司机免费视频一区二区三区| 国产一区二区视频在线看| 久久精品系列| 日韩精品麻豆| 亚洲国产不卡| 中文视频一区| 欧美日韩一视频区二区| 欧美国产日本| 日韩精品专区| 欧美日韩色图| 久久国产亚洲精品| 男女性色大片免费观看一区二区 | 国产精品国产三级国产在线观看| 国产精久久久| 视频一区二区国产| 国产欧美综合一区二区三区| 日韩av专区| 久热综合在线亚洲精品| 国产欧美激情| 电影亚洲精品噜噜在线观看| 国产精品毛片| 国产成人精品一区二区三区在线| 91久久久久| 欧美一区=区三区| 蜜桃成人精品| 日韩精品成人在线观看| 日韩深夜视频| 久久狠狠久久| 91久久中文| 日韩一区亚洲二区| 日韩国产精品久久久| 亚洲一级二级| 色婷婷亚洲mv天堂mv在影片| 亚洲精品一二| 欧美手机在线| 日韩中文首页| 国产欧美综合一区二区三区| 亚洲精品网址| 国产精品v一区二区三区| 久久国产精品久久久久久电车| 伊伊综合在线| 精品福利久久久| 国产精品22p| 91伊人久久| 日韩精品欧美成人高清一区二区| 夜夜精品视频| 日韩午夜在线| 午夜欧美精品| 精品欧美激情在线观看| 在线一区av| 高清精品久久| 国产精品久久观看| 毛片在线网站| 国产精品视频3p| 日韩一区二区三免费高清在线观看| 欧美日韩国产一区精品一区| 欧美日韩精品免费观看视完整| 精品久久久久中文字幕小说| 久久中文字幕一区二区三区| 国产福利资源一区| 里番精品3d一二三区| 久久99精品久久久野外观看| 久久av影院| 国产成人a视频高清在线观看| 国产成人精品一区二区三区视频 | 欧美日韩精品免费观看视频完整| 三上亚洲一区二区| 久久久久99| 亚洲视频综合| 久久aⅴ国产紧身牛仔裤| 一区二区亚洲视频| 国产精品视频一区视频二区| 美女久久久久久| 天堂8中文在线最新版在线| 国产黄大片在线观看| 免费国产自久久久久三四区久久 | 91看片一区| 一本一道久久a久久精品蜜桃| 蜜臀av亚洲一区中文字幕| 亚洲精品福利| 国产videos久久| 国产亚洲一区在线| 国产精品v日韩精品v欧美精品网站| 久久99免费视频| 亚洲午夜精品久久久久久app| 亚洲在线国产日韩欧美| 国产伦乱精品| 五月天久久久| 红杏一区二区三区| 亚洲高清激情| 欧美1区2区3| 日韩专区在线视频| 黑森林国产精品av| 午夜性色一区二区三区免费视频| 久久精品午夜| 日韩视频1区| 99久久久久| 久久久久九九精品影院| 国产视频一区在线观看一区免费| 欧美黄色一区| 亚洲欧美在线综合| 99久久九九| 免费精品一区| 日韩精品欧美大片| 天堂av在线| 麻豆精品久久| 日韩深夜视频| 日韩成人午夜精品| 999视频精品| 日本成人手机在线| 亚洲免费在线| 亚洲精品午夜av福利久久蜜桃| 久久黄色影视| 亚洲精一区二区三区| av在线日韩| 久久精品一本| 国产亚洲一区| 日韩av中文在线观看| 激情丁香综合| 久久91视频| 亚洲精品麻豆| 免费日韩av| 亚洲精品888| 国产+成+人+亚洲欧洲在线| 欧美激情三区| 国产成人精选| 日韩精品麻豆| 欧美久久精品一级c片| 久久久久国产| 日本在线高清| 免费av一区二区三区四区| 国内亚洲精品| 麻豆亚洲精品| 欧美日本不卡高清| 亚洲色图国产| 国产精品密蕾丝视频下载| 国产精品久久久久久久久久久久久久久| 日韩精品视频网| 国产精品亚洲欧美| 色乱码一区二区三区网站| 日韩精品首页| 视频一区视频二区中文| 日韩黄色av| 国产videos久久| 国产精品丝袜xxxxxxx| 国产精品国产三级在线观看| 欧美日韩国产高清电影| 精品美女视频| 免费观看在线综合色| 国产欧美一区二区精品久久久| 久久国产66| 精品成人免费一区二区在线播放| 国产精品中文| 亚洲电影在线一区二区三区| 日本91福利区| 亚洲成人va| 日韩国产欧美在线视频| 成人午夜精品| 国产私拍福利精品视频二区| 成人久久一区| 青青草国产成人99久久| 欧美jjzz| 精品一区二区三区中文字幕在线| 99视频精品全国免费| 亚洲精品小说| 日韩综合一区| 国产欧美一区二区三区国产幕精品| 激情视频一区二区三区| 国产精品18| **爰片久久毛片| 超级白嫩亚洲国产第一| 日韩和欧美的一区| 久久精品国产99久久| 麻豆视频观看网址久久| 一区二区三区网站| 免费视频亚洲| 欧洲av一区二区| 国产成人精品一区二区三区在线| 亚洲美女久久| 久久一级电影| 日韩欧美三级| 欧美日韩国产观看视频| 国产精品v亚洲精品v日韩精品| 亚洲青青久久| 亚洲男人在线| 日韩精品免费视频人成| 亚洲欧洲国产精品一区| 先锋亚洲精品| 中文一区一区三区免费在线观 | 中文字幕日韩欧美精品高清在线| 亚洲午夜黄色| 激情五月色综合国产精品| 日韩精品永久网址| 久久电影tv| 免费av一区二区三区四区| 国精品一区二区|