在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java/ shiro登錄測(cè)試不進(jìn)入doCredentialsMatch方法

shiro登錄測(cè)試不進(jìn)入doCredentialsMatch方法

最近學(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());

}

日志

clipboard.png

日志上說(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

clipboard.png 因?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)了

clipboard.png

clipboard.png

問(wèn)題已經(jīng)全部解決 無(wú)語(yǔ)了 犯了個(gè)低級(jí)錯(cuò)誤僅僅聲明了logger而沒(méi)有實(shí)例化 汗!!!

2018年5月5日 10:36