最近學(xué)習(xí)開(kāi)濤老師的shiro教程 用的是ssm框架 然后在test里面測(cè)試登錄流程 但是目前情況是不過(guò)緩存
subject.login()方法后去我的自定義UserRealm中獲取AuthenticationInfo身份信息
SpringMvc配置
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
<property name="cacheManagerConfigFile" value="classpath:ehcache/ehcache.xml"/>
</bean>
<!--自定義realm-->
<bean id="userRealm" class="com.zms.realm.UserRealm">
<property name="credentialsMatcher" ref="credentialsMatcher"/>
</bean>
<!-- 憑證匹配器 -->
<bean id="credentialsMatcher" class="com.credentials.RetryLimitHashedCredentialsMatcher">
<constructor-arg ref="cacheManager"/>
<property name="storedCredentialsHexEncoded" value="true"/>
</bean>
RetryLimitHashedCredentialsMatcher類
public class RetryLimitHashedCredentialsMatcher extends HashedCredentialsMatcher {
private Cache<String,AtomicInteger> passwordRetryCache;
public RetryLimitHashedCredentialsMatcher(CacheManager cacheManager) {
passwordRetryCache = cacheManager.getCache("passwordRetryCache");
System.out.println("緩存初始化成功");
// TODO: handle exception
}
public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
String userName = token.getPrincipal().toString();
System.out.println("獲取token中的用戶名稱:");
System.out.println(userName);
System.out.println("獲取判斷成功的次數(shù):");
AtomicInteger retryCount = passwordRetryCache.get(userName);
if (null == retryCount) {
retryCount = new AtomicInteger(0);
passwordRetryCache.put(userName,retryCount);
}
if (retryCount.incrementAndGet() > 5) {
throw new ExcessiveAttemptsException();
}
boolean matches = super.doCredentialsMatch(token, info);
if (matches){
passwordRetryCache.remove(userName);
}
return matches;
}
}
Test方法
@Test
public void testLoginSuccess() {
login("classpath:realm/shiro.ini", "zhang1", "123");
Assert.assertTrue(subject().isAuthenticated());
}
日志
日志上說(shuō)我沒(méi)有設(shè)置緩存屬性 在springMvc中已經(jīng)設(shè)置了 難道是我ini文件里面又設(shè)置了一次userRealm?
shiro.ini
userRealm=com.shiro.myrealm.UserRealm
securityManager.realms=$userRealm
已經(jīng)找到 No cache or cacheManager properties havce been set的原因了
因?yàn)殚_(kāi)濤老師的教程初期沒(méi)有采用框架即所謂的容器管理 在我的項(xiàng)目中 我采用方法是spring中初始化部分bean 然后在ini文件中初始化UserRealm 這種方法是行不通的 因?yàn)槭褂昧藄sm框架 通過(guò)容器的方式加載管理bean 我的項(xiàng)目中 確實(shí)初始化了ehcache緩存 但是沒(méi)有在啟動(dòng)時(shí)就初始化UserRealm并初始化自定義CredentialsMatcher
因?yàn)樵趖est中 肯定是先運(yùn)行spring.xml 再去運(yùn)作ini文件
所以我在bean中注入了userRealm并且注入自定義CredentialsMatcher 這是問(wèn)題1
第二個(gè)問(wèn)題
當(dāng)初為了驗(yàn)證自定義CredentialsMatcher類RetryLimitHashedCredentialsMatcher 因?yàn)槌跗跊](méi)有采用密碼加密方式 我沒(méi)有設(shè)置加密方式 是md5還是其他的加密方式 hashAlgorithmName并沒(méi)有默認(rèn)值
目前的又出現(xiàn)了新問(wèn)題 密碼次數(shù)過(guò)多 不拋出異常是什么鬼 明明已經(jīng)進(jìn)來(lái)了
問(wèn)題已經(jīng)全部解決 無(wú)語(yǔ)了 犯了個(gè)低級(jí)錯(cuò)誤僅僅聲明了logger而沒(méi)有實(shí)例化 汗!!!
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。