【问题标题】:Adding role based access for URLs为 URL 添加基于角色的访问权限
【发布时间】:2014-01-08 08:15:20
【问题描述】:

我正在开发一个遗留应用程序(struts 1.1 在 jdk 1.4 中运行,tomcat 6),需要有关实施基于用户角色的安全性的建议。

用户 u1 具有读/查看权限,而用户 u2 对某些操作具有写权限。例如

用户 u1 的网址:

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

(显示DB中key 12相关的内容)。

用户 u2 的网址:

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

(它基本上在 DB 中为键 12 插入音符值)

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

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

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

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

有没有替代的解决方法?

【问题讨论】:

  • 看看Spring Security - 它允许您使用任何您喜欢的身份验证机制将角色映射到 URL。
  • @MattR 添加新技术将是最后的选择,如果我使用 Sprint,是否需要将整个用户角色管理系统移植到 Sprint 安全性中?
  • 您可以使用您现有的用户/角色,您需要进行大量配置,以及查找现有用户的UserDetailsService 的实现。

标签: java security struts


【解决方案1】:

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

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

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

    ...
}

【讨论】:

  • 正如我已经提到的,更改 4k+ 动作类是不切实际的。
【解决方案2】:

在不太了解您的应用程序的情况下,但我会尽量为我的基于角色的解决方案申请 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

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 2017-01-16
    • 2014-01-25
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2023-03-15
    • 2020-06-22
    相关资源
    最近更新 更多