【问题标题】:Restricting users from accessing pages by directly changing the URL in JSF通过直接更改 JSF 中的 URL 来限制用户访问页面
【发布时间】:2013-02-11 23:32:45
【问题描述】:

我的应用程序中有两种用户 - 客户和卖家。我在 JSF 中使用PhaseListener 来防止用户在未登录的情况下访问页面,但是在他们登录后我不知道如何防止用户更改地址栏中的 URL 并访问他也不允许的页面.例如,阻止客户访问卖家页面。

有人知道如何防止此类非法访问吗?

【问题讨论】:

  • 您需要检查每个页面,例如用户是否属于某个角色等,如果不重定向到登录页面。我对 JSF 了解不多,但这是一般的想法。不,您不能阻止用户更改 URL
  • 嗯?为什么要避免基于请求的授权?这样你只会自相矛盾。
  • 对不起,我误解了她的回答。

标签: java jsf authorization


【解决方案1】:

您需要验证那些直接访问时在您的页面上导致错误的参数。您可以在 jsf2 中的 prerenderview 事件或 jsf1.2 中的 post 构造方法中执行此操作

【讨论】:

  • 对不起,我理解错了,不是直接访问URL的错误。
【解决方案2】:

为用户分配一个组/角色并在您的阶段侦听器中进行检查(从技术上讲,它最好是一个简单的 servlet 过滤器,毕竟,阶段侦听器在幕后,即对于简单的目的来说非常笨拙并且不'不在非 JSF URL 上运行)。

例如,只允许具有SELLER 角色的用户访问以/seller/ 开头的网址:

if (url.startsWith("/seller/") && user.getRoles().contains(Role.SELLER)) {
    // Allow access.
} else {
    // Block access.
}

请注意,许多身份验证框架都提供/内置了此功能,例如 Java EE 内置容器管理身份验证和 3rd 方库 Apache Shiro。然后,您只需要一个简单的web.xml 配置条目<security-constraint> 或一些配置文件,例如 Shiro 中的 INI 文件。

另见:

【讨论】:

    【解决方案3】:

    您可以使用一个文件或其他东西来为每个页面映射一个用户角色。(某些页面可能由超过 1 个用户角色访问 示例:

    <entry key="acl_page_sub/page1">client,seller</entry>
    <entry key="acl_page_sub2/page1">client</entry>
    <entry key="acl_page_sub2/page2">seller</entry>
    

    然后您定义了某种 LoginController 类,您可以在其中对照该列表检查当前用户角色和请求的页面 (url)。如果未授予,则重定向到自定义错误页面或登录页面或其他任何内容。

    你将这个 logincontroller 类添加到你的 facesconfig 中。

    【讨论】:

      【解决方案4】:

      为此使用Filter。创建实现javax.servlet.Filter 接口的类,并在doFilter() 方法中检查用户的角色,如果用户没有角色,则将他重定向到某个自定义页面。在web.xml 中添加此过滤器的定义和映射:

      <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>mypackage.MyFilter</filter-class>
      </filter>
      
      <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern>*.xhtml</url-pattern>
      </filter-mapping>
      

      【讨论】:

        猜你喜欢
        • 2014-03-03
        • 2011-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-25
        • 2012-01-18
        相关资源
        最近更新 更多