[main] #爲了驗證加密過的密碼,自定義一個jdbcRealm jdbcRealm = com.cqw.shiro.MyJdbcRealm jdbcRealm.permissionsLookupEnabled = true jdbcRealm.authenticationQuery = SELECT pwd FROM user WHERE userName = ?
利用shiro本身的密碼驗證程序自動login,但因爲存儲在數據庫中是加密過的byte[],而shiro自動的是使用以下方式得到:java
result[0] = rs.getString(1);
致使密碼驗證始終有問題數據庫
因而自定義了一個MyJdbcRealm,用來取代系統默認的jdbcrealmapache
public class MyJdbcRealm extends JdbcRealm { /* (non-Javadoc) * @see org.apache.shiro.realm.jdbc.JdbcRealm#doGetAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken) */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken upToken = (UsernamePasswordToken) token; String username = upToken.getUsername(); //本身的方法取得數據庫中的密碼 Record user = User.dao.findByUserName(username); char[] userPwd = ToolString.BytesToStr(user.get(User.column_userPwd)).toCharArray(); SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username, userPwd, getName()); return info; } }
這樣,再驗證就ok啦ide
啦啦啦啦啦啦加密