我已经和shiro(ki,jsecurity)合作了几天,并且已经能够创建一个测试应用程序.我正在使用struts2,关闭JBoss.我已经能够创建一个shiro.ini文件与一些硬编码用户,我已经得到了这个工作.似乎JAVA中的API非常容易掌握,因此将shiro集成到我的应用程序并使其功能化并不是真正的问题.我真正的问题是,我无法找到任何形式的文档,介绍如何使用此设置创建/绑定REALM到Oracle数据库.我找到了几个例子,并且漫无目的地尝试使其适应我的情况.但我一直无法.
我有一个带有USERS表的oracle数据库,它只包含用户名,密码和角色.如果我能够建立连接,它似乎应该恰好适合我当前的登录/注销应用程序.
我在web.xml中添加了以下行
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)
然后我将shiro.ini添加到我的WEB-INF:
[main]
[users]
bruins = boston, admin, super, worker
rangers = newyork, super, worker
leafs = toronto, worker
[urls]
/authoring/logout = logout
/authoring/** = authc
Run Code Online (Sandbox Code Playgroud)
之后,它只是从我的loginAction.java中调用java代码:
Factory<SecurityManager> 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) {
...
} …Run Code Online (Sandbox Code Playgroud)