request.IsuserInrole ("المسؤول") يعيد أيضًا صحيحًا للمستخدم ليس في المسؤول
-
21-09-2019 - |
سؤال
أحاول حاليًا الخروج من 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>
شكرًا لك!
المحلول
تم إصلاحه عن طريق التأكد من أن إعداد عالم "تعيين مجموعات" فارغ. سوف الأسماك الزجاجية تحميلها من جدول المجموعة.
نصائح أخرى
تبدو تعيينات الأمان الخاصة بك على ما يرام للوهلة الأولى. ماذا عن تعيينات المستخدم الخاصة بك؟ يبدو أن اسم المستخدم نفسه يتم تعيينه على كل من أدوار المستخدم والمشرف.