为URL添加基于角色的访问权限

时间:2014-01-08 08:15:21

标签: java security struts

我正在处理遗留问题(在jdk 1.4,tomcat 6中运行的struts 1.1)应用程序,需要有关实现基于用户角色的安全性的建议。

用户u1具有读取/查看权限,而用户u2具有对某些操作的写入权限。 E.g

用户u1的网址:

  

http://www.somedomain.com:8080/app?key=12

(显示与DB中的密钥12相关的内容)。

用户u2的网址:

  

http://www.somedomain.com:8080/app?key=12&note=some注意测试

(它基本上在密钥12的DB中插入注释值)

假设拥有查看权限的用户u1知道了u2使用的url,他可以为特定密钥插入任何恶意值,这是他不应该做的。

即使基于角色的struts动作类访问已到位,这里两个用户使用的动作类都是相同的,唯一的区别是url参数。

现在我必须解决这个问题,这个问题分散在数千个动作类中。因此,在每个动作类中添加检查条件是不可行的。

我正在考虑编写一个过滤器类,它将从配置文件中读取用户角色和允许的请求参数(可能的值如action ='save'action ='view')。

有没有其他替代解决方案?

2 个答案:

答案 0 :(得分:0)

你最好的选择是修改动作类并在里面调用一些方法调用(你可以混合容器基于角色的权限)

public void perform(HttpServletRequest request)
{
    String note = request.getParameter("note");

    if(!request.isUserInRole("writer") && note != null) throw new SecurityException("not allowed");

    ...
}

答案 1 :(得分:0)

我对您的应用程序了解不多,但我会尝试尽可能地为我的基于角色的解决方案应用java declarative security

如果你很容易使用java ee声明性安全性,那就去吧。 它简单,灵活,使用标准,可以为您提供所需的安全性,并能够将您的解决方案移植到不同的Java Web服务器提供商。

也许是一个url重写器(web应用程序前面的apache可以帮助重新组织);可以拆分目的地,为此,在您的java Web服务器中设置url模式,这些模式将需要read/viewupdate/write授权权限的不同用户角色。

这需要做一些改变,但你绝对不需要改变你的4k代码库,你就可以达到一个干净的解决方案。

搜索,例如设置基于角色的安全性或java声明性安全性

阅读一些演示... http://www.thecoderscorner.com/team-blog/hosting-servers/17-setting-up-role-based-security-in-tomcat#.Us0eShoeK-Y