我正在使用shiro 1.4.0。
我的密码是MD5,如果我使用HashedCredentialsMatcher
,那么我可以成功登录:
[main]
shiro.loginUrl = /login.jsp
shiro.successUrl = /home.jsp
passwordMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher
passwordMatcher.hashAlgorithmName=MD5
passwordMatcher.storedCredentialsHexEncoded=true
ds = com.mchange.v2.c3p0.ComboPooledDataSource
ds.driverClass = com.mysql.jdbc.Driver
ds.jdbcUrl = jdbc:mysql://localhost:3306/simple_shiro_web_app
ds.user = test
ds.password = 123456
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm.authenticationQuery = SELECT password FROM USERS WHERE username = ?
jdbcRealm.userRolesQuery = SELECT role_name FROM USERS_ROLES WHERE username = ?
jdbcRealm.permissionsQuery = SELECT permission_name FROM ROLES_PERMISSIONS WHERE role_name = ?
jdbcRealm.credentialsMatcher = $passwordMatcher
jdbcRealm.dataSource=$ds
securityManager.realm = $jdbcRealm
但如果我使用PasswordMatcher
(tomcat启动时没有任何错误消息),那么我登录失败:
passwordMatcher = org.apache.shiro.authc.credential.PasswordMatcher
passwordService = org.apache.shiro.authc.credential.DefaultPasswordService
passwordService.hashService.hashAlgorithmName=MD5
passwordMatcher.passwordService = $passwordService
似乎仍然使用默认SHA-256
,为什么?
另外,在1.4中,org.apache.shiro.crypto.hash.DefaultHashService.class
和shiro-core.jar
中有相同的类和相同的包名(例如shiro-crypto-hash.jar
),有什么区别和原因?
-------------- 更新 -------------------------
有一条日志消息:
TRACE ClassUtils.forName - Unable to load class named [e10adc3949ba59abbe56e057f20f] from the current ClassLoader. Trying the system/application ClassLoader...
虽然e10adc3949ba59abbe56e057f20f
是我的md5密码。
答案 0 :(得分:0)
日志中的任何警告?如果不是LdapRealm.doGetAuthenticationInfo()
,请查看您是否获得了预期的密码。
在1.4中,一些代码已被移动到其他模块中(尽管它们将以与1.4之前相同的方式解析)
答案 1 :(得分:0)
通过调试,我发现DefaultPasswordService
使用base64
哈希格式。
将哈希格式更改为hex
后,它就可以使用。
<bean id="hexFormat" class="org.apache.shiro.crypto.hash.format.HexFormat">
</bean>
<bean id="passwordService" class="org.apache.shiro.authc.credential.DefaultPasswordService">
<property name="hashService" ref="hashService" />
<property name="hashFormat" ref="hexFormat" />
</bean>