2015-05-12 3 views
2

Я продолжаю получать эту ошибку при попытке входа в систему. Любая помощь приветствуется.Ошибка входа в Apache Shiro: IncorrectCredentialsException

Войти код

Realm realm = new TestRealm(); 
SecurityManager sm = new DefaultSecurityManager(realm); 
SecurityUtils.setSecurityManager(sm); 

UsernamePasswordToken token = new UsernamePasswordToken(); 
token.setUsername("dave"); 
token.setPassword("le1990".toCharArray()); 
token.setRememberMe(true); 

Subject sub = SecurityUtils.getSubject(); 
sub.login(token); 

doGetAuthenticationInfo метод

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException{  

    UsernamePasswordToken upToken = (UsernamePasswordToken)token;  
    String username = upToken.getUsername(); 

    if(username == null) 
     this.logger.info("We don't except Null usernames. sorry. "); 

    AuthenticationInfo info = null; 
    try{ 

     USER user = new USER(); 
     String pass = user.getPassForUser(); 

     if(pass == null) 
      throw new AccountException("The account your looking for doesn't exist"); 


     info = new SimpleAuthenticationInfo(username, pass, getName()); 

метод user.getPassForUser возвращает жесткое проводное значение для тестирования. значение копируется из БД $ shiro1 $ SHA-256 $ 500 000 $ temCnap0k + zboIW7y49Mww == $ veyM6YL3QiCJvMwo0r2yu0KDC3ueAxZOYuN0vT + 0v5M =

shiro.ini файла

# realms to be used 
customSecurityRealm=com.raven.rave.common.TestRealm 
customSecurityRealm.jndiDataSourceName=java:jdbc/dbeka 
customSecurityRealm.permissionsLookupEnabled=true 

Наконец исключение брошенной

ERROR [STDERR] org.apache.shiro.authc.IncorrectCredentialsException: 
Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - dave, rememberMe=true] did not match the expected credent 
ERROR [STDERR]  at org.apache.shiro.realm.AuthenticatingRealm.assertCredentialsMatch(AuthenticatingRealm.java:600) 
ERROR [STDERR]  at org.apache.shiro.realm.AuthenticatingRealm.getAuthenticationInfo(AuthenticatingRealm.java:578) 
ERROR [STDERR]  at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doSingleRealmAuthentication(ModularRealmAuthenticator.java:180) 
ERROR [STDERR]  at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:267) 
ERROR [STDERR]  at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198) 
ERROR [STDERR]  at org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106) 
ERROR [STDERR]  at org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:270) 
ERROR [STDERR]  at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:256) 

Когда я зарегистрированный пользователь, я передал один и тот же пароль «le1990». Кроме того, должен ли пароль, полученный из БД, быть открытым текстом. Если да, то как я могу расшифровать сохраненный пароль?

ответ

1

Проблема была очевидной, то есть пропущена. Я не установил credentialMatcher в область jdbc, в ini-файле. добавив в эту инструкцию исправление.

обновленный файл shiro.ini

passwordService = org.apache.shiro.authc.credential.DefaultPasswordService 
passwordMatcher = org.apache.shiro.authc.credential.PasswordMatcher 
passwordMatcher.passwordService = $passwordService 

# realms to be used 
jdbcrealm=com.raven.rave.common.TestRealm 
jdbcrealm.permissionsLookupEnabled=true 
securityManager.realm = $jdbcrealm 
#statement that fixed it up 
jdbcrealm.credentialsMatcher = $passwordMatcher 
Смежные вопросы