1

現在、Glasshfishv3でJDBCRealmを試しています。USERとADMINの2つのロールがあります。

request.isUserInRole( "ADMIN")メソッドに基づいてURL(たとえば/adminまたは/user)にリダイレクトするLoginServletがあります。

問題は、ADMINがログインするとtrueを返すため、/ adminにリダイレクトされますが、/userにアクセスすることもできます。USERがログインすると、request.isUserInRole( "ADMIN")もtrueを返します。request.isUserInRole( "NONEXISTINGROLE")は、両方に対してfalseを返します。

例えば:

request.isUserInRole( "ADMIN")+ "" + request.isUserInRole( "USER")+ "" + request.isUserInRole( "NONEXISTINGROLE")

ログインしたユーザーの場合:truetruefalseを返します

ログインした場合、ADMINはtruetruefalseを返します

これは私の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>

そして私の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>

ありがとうございました!

4

2 に答える 2

2

Realm 設定の [Assign Groups] が空であることを確認して修正しました。Glassfish はグループ テーブルからそれらをロードします。

于 2010-02-04T15:22:39.470 に答える
0

セキュリティマッピングは一見問題なく見えます。ユーザーマッピングはどうですか?同じユーザー名がユーザーと管理者の両方の役割にマッピングされているようです。

于 2009-12-28T14:22:05.357 に答える