标签: declarative-security

(isUserInRole())是将用户权限/安全性附加到JSF按钮的最简单方法吗?

我最近在JSP中开发了一个tomcat web应用程序,它使用绑定到公司Active Directory的声明性安全性(server.xml/web.xml).我被要求为刚刚起步的项目添加JSF支持.将登录表单转换为jsf是一件简单的事情,安全模型仍然有效.

一位员工询问我是否允许更广泛的受众查看其中一个报告,但仅为较小的组呈现操作按钮.作为JSF的新手,我不得不做一些研究.

我花了大约四个小时来搜索诸如"jsf按钮安全性"和"jsf按钮权限"之类的内容,并尝试了大多数死路一条的各种建议.另一位同事建议使用Spring安全模型,但如果有更简单的方法,我不想处理一大堆Spring库.

最后,我偶然发现了答案,这非常简单.我只需要使用HttpServletRequest方法:isUserInRole()来确定当前登录的用户是否有权查看操作按钮.在过去的十年里,我已经使用了很多HttpServletRequests,但我不记得曾经学过这种方法.使用jsf,获得该方法很简单,如下所示:

public boolean isUserInRole(String role) {
    return (FacesContext.getCurrentInstance().getExternalContext().isUserInRole(role));
}
Run Code Online (Sandbox Code Playgroud)

我的问题具体是:我是否应该注意这种方法的问题,还有另一种更简单的方法吗?

java jsf servlets declarative-security jsf-2

8
推荐指数
1
解决办法
1848
查看次数

Java EE声明性安全性,无法为JDBC领域用户加载组

这是我在这里的第一篇文章.关于声明性Java EE安全性,我有两个问题:(1)基于文件的身份验证和(2)基于数据库的身份验证.我为这两个问题附上了配置的相关部分.我在Glassfish 3.1.1上运行代码.也提前感谢您的帮助.

我也在寻找我的问题的答案,并找到了一些有用的例子,我也把它放在信息的底部.我试图跟随它们,所以配置的当前状态可以包含这些样本的详细信息,但它们没有解决问题.

- 如果勾选了"默认主体到角色映射",则基于文件的身份验证可以正常工作,否则即使将主体添加到映射中它也不起作用.我可能没有以正确的方式配置某些东西.

基于-DB的身份验证.就授权而言,它无法正常工作,因为无法读取组名.详情见下文.身份验证可以正常工作,即用户被识别.我甚至尝试重命名表格以避免与Glassfish的一些内部内容发生潜在的名称冲突......

(1)基于文件的身份验证: 文件领域,2个用户:用户,管理员添加并分配给组:用户和管理员(配置/ server-config/security/realms /文件 - >管理用户)

配置/ server-config/security默认主体到角色映射"勾选" - >它的工作默认主体到角色映射"未勾选" - >即使将其添加到安全性映射,它也不起作用.

web.xml

[...]
    <security-constraint>
        <display-name>Admin Pages</display-name>
        <web-resource-collection>
            <web-resource-name>Protected Admin Area</web-resource-name>
            <description/>
            <url-pattern>/faces/admin/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>HEAD</http-method>
            <http-method>PUT</http-method>
            <http-method>OPTIONS</http-method>
            <http-method>TRACE</http-method>
            <http-method>DELETE</http-method>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
    <security-constraint>
        <display-name>User Pages</display-name>
        <web-resource-collection>
            <web-resource-name>Protected Users Area</web-resource-name>
            <description/>
            <url-pattern>/faces/users/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>HEAD</http-method>
            <http-method>PUT</http-method>
            <http-method>OPTIONS</http-method>
            <http-method>TRACE</http-method>
            <http-method>DELETE</http-method>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>user</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>  
        <auth-method>FORM</auth-method>
        <realm-name>file</realm-name>
        <form-login-config>
            <form-login-page>/faces/loginForm.xhtml</form-login-page>
            <form-error-page>/faces/loginError.xhtml</form-error-page>
        </form-login-config>
    </login-config>

[...]
Run Code Online (Sandbox Code Playgroud)
glassfish-web.xml:

<glassfish-web-app>
    <security-role-mapping>
        <role-name>admin</role-name>
        <group-name>admin</group-name>
    </security-role-mapping> …
Run Code Online (Sandbox Code Playgroud)

java-ee declarative-security jdbcrealm

6
推荐指数
1
解决办法
3210
查看次数

标签 统计

declarative-security ×2

java ×1

java-ee ×1

jdbcrealm ×1

jsf ×1

jsf-2 ×1

servlets ×1