java web shiro_javase和javaweb环境下shiro的搭建
shiro-1
javase環(huán)境下搭建shiro
1.導(dǎo)入jar包
2.配置文件:存儲(chǔ)臨時(shí)文件
shiro.ini文件:存儲(chǔ)數(shù)據(jù),用戶名,密碼,角色,權(quán)限
3.代碼
// 1.獲取安全管理器
Factory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
// 2.設(shè)置安全管理器
SecurityUtils.setSecurityManager(securityManager);
// 3.獲取subject對(duì)象,即要登錄的對(duì)象
Subject subject = SecurityUtils.getSubject();
spring與shiro集成
1.導(dǎo)入jar包
2.搭建好spring,springmvc
3.搭建shiro環(huán)境
1.web.xml
shiroFilter
org.springframework.web.filter.DelegatingFilterProxy
targetFilterLifecycle
true
shiroFilter
/*
2.在spring.xml中進(jìn)行相關(guān)配置
shiro配置的核心:spring.xml歐中配置的一個(gè)bean
web.xml中DelegatingFilterProxy作用:入口,完成servlet容器到ioc容器的關(guān)聯(lián),到spring容器中找filter-name相同名字的bean實(shí)例
如果沒(méi)有配置targetBeanName屬性,則filter-name必須與bean的name相同
表單提交的數(shù)據(jù)封裝到 usernamePasswordToken 數(shù)據(jù)庫(kù)查詢到的數(shù)據(jù)封裝到SimpleAuthenticationInfo
加密:MD5, SHA1
1.存儲(chǔ)數(shù)據(jù)時(shí)需要將用戶輸入的明文繼續(xù)加密(Hibernate當(dāng)中涉及md5加密) (Ream.java)
//將存入數(shù)據(jù)庫(kù)的密碼進(jìn)行MD5加密
SimpleHash sh = new SimpleHash("md5", credentials, null, 2019);
2.前端用戶輸入的值,進(jìn)行加密,string字符串經(jīng)過(guò)md5加密(spring.xml)
class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
鹽值加密:原有加密的基礎(chǔ)上加密(兩個(gè)相同密碼在數(shù)據(jù)庫(kù)存儲(chǔ)的值還是不一樣)
1.前端token當(dāng)中獲取的密碼應(yīng)該進(jìn)行鹽值加密
ByteSource salt = ByteSource.Util.bytes(principal);
new SimpleAuthenticationInfo(principal, sh, salt, realmName);
2.數(shù)據(jù)庫(kù)中的值進(jìn)行鹽值加密
new SimpleHash("md5", credentials, salt, 2019);
多Realm獲取數(shù)據(jù):將一個(gè)密碼存放在多個(gè)數(shù)據(jù)庫(kù)中,建立多個(gè)Realm,并且每個(gè)realm使用不同的加密方式,在subject.login中會(huì)進(jìn)行多個(gè)realm的調(diào)用,執(zhí)行多次驗(yàn)證,提高數(shù)據(jù)安全性
1.第一種方法:
2.第二種方法:通過(guò)ModularRealmAuthenticator認(rèn)證器
shiro認(rèn)證策略:多個(gè)realm訪問(wèn)多個(gè)數(shù)據(jù)庫(kù),如何判斷是否登錄成功
1.FirstSucessfulStrategy 第一個(gè)realm認(rèn)證成功就算成功
2.AtLeastOneSuccessfulStrategy 多個(gè)realm認(rèn)證時(shí),一個(gè)成功代表成功(默認(rèn))
3.AllSuccessfulStrategy 多個(gè)realm認(rèn)證時(shí),全部成功才代表成功
授權(quán):控制哪一個(gè)用戶可以訪問(wèn)哪一個(gè)web資源
1.編程式
if(subect.hasRole){
//有權(quán)限
}else{
//沒(méi)有權(quán)限
}
2.注解式:通過(guò)在執(zhí)行的java方法上注解
@RequireRoles("admin")
public void hello(){
//有權(quán)限
}
3.jsp/gsp標(biāo)簽
有權(quán)限
1.在FilterChainDefinitions中定義web資源對(duì)應(yīng)角色
web資源=roles[角色名稱]
/admin.jsp=roles[admin]
2.一個(gè)用戶進(jìn)行登錄認(rèn)證成功之后,之中還是要查找認(rèn)證成功的角色擁有什么角色.realm可以和數(shù)據(jù)庫(kù)交互,獲取指定認(rèn)證成功的用戶對(duì)應(yīng)的角色
1.我們可以自定義一個(gè)Realm,繼承AuthorizingRealm,認(rèn)證和授權(quán)
2.在ioc容器配置指定的Realm的bean實(shí)例(授權(quán)器)
3.告知securityManager使用哪一個(gè)授權(quán)管理器
參考視頻:點(diǎn)擊我
總結(jié)
以上是生活随笔為你收集整理的java web shiro_javase和javaweb环境下shiro的搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: deepin启动盘无法引导安装_深度启动
- 下一篇: java的query_Java-Quer