我能夠使用Apache Shiro進行身份驗證,但現在我需要授權哪種方式從數據庫中獲取角色。查詢的工作,但只有當我使用整數角色。出於某種原因,它正在尋找角色是整數。這似乎沒有幫助,如果我不得不尋找數字作爲角色,我錯過了一些設置,告訴Shiro尋找一個字符串或varchar?Apache Shiro userRolesQuery只尋找一個int
這裏是我的Shiro.ini文件:
[main]
ds = org.apache.shiro.jndi.JndiObjectFactory
ds.requiredType = javax.sql.DataSource
ds.resourceName = jdbc/SQL05
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource = $ds
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm.authenticationQuery = SELECT company_password FROM CompanyUser where company_username = ?
jdbcRealm.userRolesQuery = SELECT role FROM CompanyUser where company_username = ?
Authentication.java
System.setProperty("log4j.category.org.apache.shiro", "DEBUG");
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject currentUser = SecurityUtils.getSubject();
String b = "false";
log.info("WTF");
try{
if (!currentUser.isAuthenticated()) {
UsernamePasswordToken token = new UsernamePasswordToken("user1", "test") ;
token.setRememberMe(true);
try {
currentUser.login(token);
b = "You have successfully logged in user: " + token.getPrincipal().toString();
if (currentUser.hasRole("1")) {
b += " and they have the role of being awesome";
} else {
b += " and we can't find the role yet.";
}
}catch (UnknownAccountException uae) {
b = token.getPrincipal().toString();
log.info("There is no user with username of " + token.getPrincipal().toString());
}
}
}catch (AuthenticationException ae) {
b = ae.toString();
log.info(b);
}catch(Exception e){
b = e.toString();
log.info(b);
}
所以要清楚,這個當前工作,因爲我有:
currentUser.hasRole("1")
在那裏和角色字段有一個1用於該用戶名。
Severe: com.microsoft.sqlserver.jdbc.SQLServerException: Conversion failed when converting the nvarchar value 'Awesome' to data type int.
那麼,如何得到它接受的字符串:如果我在兩個地方我得到以下錯誤改變1爲「真棒」(不帶引號)?
我的表CompanyUser:
userid int not null auto increment
personid int not null
company_username varchar(15) not null
company_password varchar(15) not
null role varchar(20) not null
出於某種原因,它試圖列「角色」轉換爲int。
你確定你的角色字段的數據庫列有正確的數據類型嗎?也許它被聲明爲int,所以它試圖將任何輸入解釋爲整數 – Reek
對於我來說,帶有字符串作品的角色。請張貼您的表格結構。 – dev
更新了所需信息的問題。 –