Security isUserInRole(“ADMIN”)也为不在角色ADMIN中但在角色user中的用户返回true

Security isUserInRole(“ADMIN”)也为不在角色ADMIN中但在角色user中的用户返回true,security,servlets,glassfish,security-roles,jsecurity,Security,Servlets,Glassfish,Security Roles,Jsecurity,我目前正在Glasshfish v3中试用JDBCRealm: 我有两个角色:用户和管理员 我有一个LoginServlet,它根据request.isUserInRole(“admin”)方法重定向到url(比如/admin或/user) 问题是,当管理员登录时,它会返回true,因此会重定向到/ADMIN,但他也可以访问/user。当用户登录请求时,isUserInRole(“ADMIN”)也返回true。isUserInRole(“不存在的角色”)为两者返回false 例如: reques

我目前正在Glasshfish v3中试用JDBCRealm: 我有两个角色:用户和管理员

我有一个LoginServlet,它根据request.isUserInRole(“admin”)方法重定向到url(比如/admin或/user)

问题是,当管理员登录时,它会返回true,因此会重定向到/ADMIN,但他也可以访问/user。当用户登录请求时,isUserInRole(“ADMIN”)也返回true。isUserInRole(“不存在的角色”)为两者返回false

例如:

request.isUserInRole(“管理员”)+“”+ request.isUserInRole(“用户”)+“”+ request.isUserInRole(“不存在的角色”)

对于loggedin用户:返回true false

对于loggedin,ADMIN返回true 真假

这是my web.xml的一部分:

<security-constraint>
    <display-name>Constraint1</display-name>
    <web-resource-collection>
        <web-resource-name>adminProtected</web-resource-name>
        <description>Administrator restricted area</description>
        <url-pattern>/admin/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>ADMIN</role-name>
    </auth-constraint>
</security-constraint>
<security-constraint>
    <display-name>Constraint2</display-name>
    <web-resource-collection>
        <web-resource-name>userProtected</web-resource-name>
        <description>User restricted area</description>
        <url-pattern>/user/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>USER</role-name>
    </auth-constraint>
</security-constraint>
<security-constraint>
    <display-name>Constraint3</display-name>
    <web-resource-collection>
        <web-resource-name>LoginServlet</web-resource-name>
        <description>All restricted area</description>
        <url-pattern>/LoginServlet</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>USER</role-name>
        <role-name>ADMIN</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>securityJDBC</realm-name>
    <form-login-config>
        <form-login-page>/login.jsf</form-login-page>
        <form-error-page>/login.jsf</form-error-page>
    </form-login-config>
</login-config>

<security-role>
    <description></description>

    <role-name>USER</role-name>
</security-role>
<security-role>
    <description></description>
    <role-name>ADMIN</role-name>
</security-role>
<servlet>
    <description></description>
    <display-name>LoginServlet</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>controllers.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>

约束1
管理员保护
管理员禁区
/管理员/*
得到
邮递
管理
约束2
用户保护
用户限制区
/使用者/*
得到
邮递
使用者
约束3
罗金瑟夫莱特酒店
所有禁区
/罗金瑟夫莱特酒店
得到
邮递
使用者
管理
形式
安全jdbc
/login.jsf
/login.jsf
使用者
管理
罗金瑟夫莱特酒店
罗金瑟夫莱特酒店
controllers.LoginServlet
罗金瑟夫莱特酒店
/罗金瑟夫莱特酒店
和我的sun-web.xml:

    <security-role-mapping>
    <role-name>USER</role-name>
    <group-name>USER</group-name>
</security-role-mapping>
<security-role-mapping>
    <role-name>ADMIN</role-name>
    <group-name>ADMIN</group-name>
</security-role-mapping>

使用者
使用者
管理
管理

谢谢大家!

乍一看,您的安全映射看起来不错。您的用户映射如何?看起来用户和管理员角色上都映射了相同的用户名。

通过确保领域设置“Assign Groups”为空来修复此问题。Glassfish将从组表中加载它们。

我有两个表:SecurityGroup:id;groupId;用户标识;1.管理1 2;用户;2安全用户;身份证件密码;用户标识;雇主1;21232f297a57a5a743894a0e4a801fc3;A.1 2;ee11cbb19052e40b07aac0ca060c23ee;U2Glassfish领域属性:Jaas上下文:jdbcRealm用户表:securityuser用户名列:userid密码列:密码组表:securitygroup组名列:groupIdI发现了一些问题:如果我将领域设置“Assign Groups”设置为User,ADMIN,我就会遇到原始问题。如果你将其设置为空,我可以登录,但在所有安全约束下拒绝访问。。。