2016-01-29 2 views
1

Это мой первый раз, когда я использую apache shiro, так что несите меня.Apache Shiro IncorrectCredentialsException

мои shiro.ini

# ============================================================================= 
# Quickstart INI Realm configuration 
# 
# ============================================================================= 
[main] 
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm 
jdbcRealm.permissionsLookupEnabled = true 
ds = shiro.ShiroBoneCPDataSource 
jdbcRealm.dataSource=$ds 
jdbcRealm.authenticationQuery = SELECT password FROM users WHERE username = ? 
jdbcRealm.userRolesQuery = SELECT role_id FROM user_role WHERE user_id = (SELECT id FROM users WHERE username = ?) 
jdbcRealm.permissionsQuery = SELECT permission FROM role_permission WHERE role_id = ? 



hashService = org.apache.shiro.crypto.hash.DefaultHashService 
# NONE of the hashService settings is required. The defaults will work fine. 

hashService.hashAlgorithmName = SHA-256 
hashService.generatePublicSalt = true 
# If you wanted to use some private salt bytes, provide in Base64 (NOT A BAD IDEA!) 
hashService.privateSalt = aGltYWxheWFu 

# We use this one to create a new test user with a hashed password. 
passwordService = org.apache.shiro.authc.credential.DefaultPasswordService 
passwordService.hashService = $hashService 

# We use this for our authentication tests. 
passwordMatcher = org.apache.shiro.authc.credential.PasswordMatcher 
passwordMatcher.passwordService = $passwordService 
jdbcRealm.credentialsMatcher = $passwordMatcher 

securityManager.realms = $jdbcRealm 
# ----------------------------------------------------------------------------- 
# Users and their assigned roles 
# 
# Each line conforms to the format defined in the 
# org.apache.shiro.realm.text.TextConfigurationRealm#setUserDefinitions JavaDoc 
# ----------------------------------------------------------------------------- 
[users] 


# ----------------------------------------------------------------------------- 
# Roles with assigned permissions 
# 
# Each line conforms to the format defined in the 
# org.apache.shiro.realm.text.TextConfigurationRealm#setRoleDefinitions JavaDoc 
# ----------------------------------------------------------------------------- 
[roles] 

Я использую этот shiro.ini файл здесь

public Subject authenticateWithShiro(String username, char[] pass) { 

    Subject currentUser = null; 
    try { 
      log.info("Authentication with shiro is started..."); 

      Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory(
          "classpath:resources/shiro.ini"); 
      org.apache.shiro.mgt.SecurityManager securityManager = factory 
          .getInstance(); 
      SecurityUtils.setSecurityManager(securityManager); 

      currentUser = SecurityUtils.getSubject(); 

      Session session = currentUser.getSession(); 
      session.setAttribute("someKey", "aValue"); 
      String value = (String) session.getAttribute("someKey"); 
      if (value.equals("aValue")) { 
        log.info("Retrieved the correct value! [" + value + "]"); 
      } 

      // let's login the current user so we can check against roles and 
      // permissions: 
      if (!currentUser.isAuthenticated()) { 
       System.out.println("Current user has been authenticated."); 
        UsernamePasswordToken token = new UsernamePasswordToken(
            username, pass); 
        token.setRememberMe(true); 
        currentUser.login(token); 

      } 
    } catch (Exception e) { 
      log.error("Authentication failed", e); 
      log.error(e.getMessage()); 
    } 

    return currentUser; 
    } 

Таким образом, при выполнении кода ниже, org.apache.shiro.authc.IncorrectCredentialsException: Отправил учетные данные для token [org.apache.shiro.authc.UsernamePasswordToken - yunusa, rememberMe = true] не соответствует ожидаемым учетным данным

Subject subject = new UserHandler().authenticateWithShiro(username, textPassword.getPassword()); 
     if (subject != null && subject.isAuthenticated()) { 
       System.out.println("successfull login"); 
     } else { 
       System.out.println("Failed log in"); 
     } 

ответ

0

После того, как вы потратили много времени, пытаясь решить проблемы с помощью stackoverflow в поисках ответа без каких-либо успехов, я, наконец, решил пройти через INI (shiro.ini) и нашел небольшую ошибку. Я изначально установил hashService.generatePublicSalt в true и в то же время настроил частную соль, которая, казалось, была ошибкой.

Когда я удаляю личную соль, все работает как шарм.

0

Я также новичок в сиро. Я полагаю, вы, вероятно, пропустили добавление информации токена Auth в файл ini. Добавить:

yourID = passWord 

Под [users] раздел.

Надеюсь, это поможет!

+0

Что такое информация о токене Auth? Какой id и пароль я буду расшифровать, чтобы добавить? Заранее спасибо –

+0

Да, ваше имя пользователя и пароль. – Helios

+0

Пользователи уже доступны в таблице пользователей, включая мой! Что вы говорите, это случайный идентификатор/пароль или что-то, что я должен найти где-нибудь? Извините снова за слишком много вопросов. –