request.IsuserInrole ("المسؤول") يعيد أيضًا صحيحًا للمستخدم ليس في المسؤول

StackOverflow https://stackoverflow.com/questions/1968882

سؤال

أحاول حاليًا الخروج من JDBCrealm في Glasshfish V3: لديّ 2 أدوار مستخدم ومدير.

لديّ loginservlet يعيد التوجيه إلى عنوان URL (say /admin أو /user) استنادًا إلى طريقة request.isuserinrole ("admin").

المشكلة هي عندما يتم تسجيل المسؤول في ، فإنه يعود صحيحًا ، لذلك يتم إعادة توجيهه إلى /المسؤول ولكن يمكنه أيضًا الوصول إلى /المستخدم. عندما يتم تسجيل مستخدم في request.ISUSERINROLE ("admin") يعيد صحيح أيضًا. request.isuserInrole ("nonexistingrole) يعيد خطأ لكليهما.

على سبيل المثال:

request.isuserInrole ("admin")+ ""+ request.isuserInrole ("user")+ ""+ request.isuserinrole ("nonexistingrole")

لمستخدم loggedin: إرجاع صحيح صحيح خطأ

بالنسبة لـ LoggedIn ، يعيد المسؤول الحقيقي خطأ حقيقي

هذا جزء من 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>

شكرًا لك!

هل كانت مفيدة؟

المحلول

تم إصلاحه عن طريق التأكد من أن إعداد عالم "تعيين مجموعات" فارغ. سوف الأسماك الزجاجية تحميلها من جدول المجموعة.

نصائح أخرى

تبدو تعيينات الأمان الخاصة بك على ما يرام للوهلة الأولى. ماذا عن تعيينات المستخدم الخاصة بك؟ يبدو أن اسم المستخدم نفسه يتم تعيينه على كل من أدوار المستخدم والمشرف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top