我正在处理遗留问题(在jdk 1.4,tomcat 6中运行的struts 1.1)应用程序,需要有关实现基于用户角色的安全性的建议。
用户u1具有读取/查看权限,而用户u2具有对某些操作的写入权限。 E.g
用户u1的网址:
(显示与DB中的密钥12相关的内容)。
用户u2的网址:
(它基本上在密钥12的DB中插入注释值)
假设拥有查看权限的用户u1知道了u2使用的url,他可以为特定密钥插入任何恶意值,这是他不应该做的。
即使基于角色的struts动作类访问已到位,这里两个用户使用的动作类都是相同的,唯一的区别是url参数。
现在我必须解决这个问题,这个问题分散在数千个动作类中。因此,在每个动作类中添加检查条件是不可行的。
我正在考虑编写一个过滤器类,它将从配置文件中读取用户角色和允许的请求参数(可能的值如action ='save'action ='view')。
有没有其他替代解决方案?
答案 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/view
和update/write
授权权限的不同用户角色。
这需要做一些改变,但你绝对不需要改变你的4k代码库,你就可以达到一个干净的解决方案。
搜索,例如设置基于角色的安全性或java声明性安全性