我尝试在OSGI环境中使用Apache Shiro。 为了在MyAuthorizingRealm类上使用CDI bean,我有pax-shiro-cdi扩展名。 我的简单AuthorizingRealm就在这里:
@ShiroIni
public class MyAuthorizingRealm extends AuthorizingRealm {
@Inject // will return null always
private SimpleUserStorage userStorage;
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
throws AuthenticationException {
System.out.println(" BEAN " + userStorage);
UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) authenticationToken;
return new SimpleAccount(usernamePasswordToken.getPrincipal(),
"123456".toCharArray(), super.getName());
}
我的SimpleUserStorage就在这里:
public class SimpleUserStorage {
private List<String> users = new ArrayList<String>();
public List<String> getUsers(){
users.add("user");
users.add("user1");
return users;
}
}
但奇怪的是我可以在我的RESTService类中注入SimpleUserStorage并且它运行良好..
SimpleUserStorage in RestService and it work well.
For example :
@Path("/user")
public class UserRestService {
@Inject
private SimpleUserStorage userStorage;
@GET
@Produces("text/html")
public String getDataToDisplay() {
return "<strong>Hehe)</strong>" + userStorage.getUsers().size() ;
}
}
为什么在MyAuthorizingRealm中我得到null而不是SimpleUserStorage的参考?
我是用户Glassfish 4并尝试编写纯Java EE应用程序。