我已经和shiro(ki,jsecurity)合作了几天,并且已经能够创建一个测试应用程序.我正在使用struts2,关闭JBoss.我已经能够创建一个shiro.ini文件与一些硬编码用户,我已经得到了这个工作.似乎JAVA中的API非常容易掌握,因此将shiro集成到我的应用程序并使其功能化并不是真正的问题.我真正的问题是,我无法找到任何形式的文档,介绍如何使用此设置创建/绑定REALM到Oracle数据库.我找到了几个例子,并且漫无目的地尝试使其适应我的情况.但我一直无法.
我有一个带有USERS表的oracle数据库,它只包含用户名,密码和角色.如果我能够建立连接,它似乎应该恰好适合我当前的登录/注销应用程序.
我在web.xml中添加了以下行
ShiroFilter
org.apache.shiro.web.servlet.ShiroFilter
ShiroFilter
/*
REQUEST
FORWARD
INCLUDE
ERROR
org.apache.shiro.web.env.EnvironmentLoaderListener
然后我将shiro.ini添加到我的WEB-INF:
[main]
[users]
bruins = boston,admin,super,worker
rangers = newyork,worker
leafs = toronto,worker
[urls]
/authoring/logout = logout
/authoring/** = authc
之后,它只是从我的loginAction.java中调用java代码:
Factory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject currentUser = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(this.username,this.password);
try {
currentUser.login(token);
Session session = currentUser.getSession();
session.setAttribute("user",this.username);
} catch (UnknownAccountException uae) {
...
} catch (IncorrectCredentialsException iae) {
...
} catch (LockedAccountException lae) {
...
} catch (AuthenticationException ae) {
...
} catch (Exception e) {
...
}
ActionMessages messages = new ActionMessages();
if (currentUser.isAuthenticated()) {
System.out.println("user is authenticated!!!!!");
if (currentUser.hasRole("admin")){
System.out.println(this.username + " can access admin functions");
}
if(currentUser.hasRole("super")){
System.out.println(this.username + " can access supervisor functions");
}
if(currentUser.hasRole("worker")){
System.out.println(this.username + " can only perform worker functions");
}
addActionMessage(getText("success.valid.user",this.username));
return SUCCESS;
} else {
System.out.println("user was not authenticated!!!!!!");
addActionError(getText("error.login"));
return ERROR;
}
总而言之,我让应用程序与硬编码用户一起工作:我的问题是,设置REALM连接到我的oracle数据库的最佳方法是什么?我已经通过几种不同的方式在网上看到了它,并且我无法将它们中的任何一种用于我的设置,我希望能够实现这一点,我可以继续熟悉API.
谢谢 – 约翰