request.isuserinrole («администратор») также возвращает истину для пользователя не в роле администратора, а пользователь роли
-
21-09-2019 - |
Вопрос
В настоящее время я пробую jdbcrealm в Glasshfish v3: у меня есть 2 роли пользователя и администратора.
У меня есть логический завод, который перенаправляет на URL (SAID /ADMIN или /пользователь) на основе метода запроса.isuserInrole («Администратор»).
Проблема заключается в том, когда администратор входит в систему, он возвращает True, поэтому перенаправляется на /администратор, но он также может получить доступ к /пользователю. Когда пользователь регистрируется в запросе. IsuserinRole («Администратор») также возвращает True. request.IsuserInrole («uncistingRole») возвращает false для обоих.
Например:
request.isuserinrole ("admin")+ ""+ request.isuserinrole ("user")+ ""+ request.isuserinrole ("uncistingrole")
Для пользователя Loggedin: возвращает True True False
Для администратора Loggedin возвращает True True False
Это часть моего 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>
Благодарю вас!
Решение
Исправлено, убедившись, что настройка сферы «назначения групп» пуста. Glassfish загрузит их из группового стола.
Другие советы
Ваши сопоставления безопасности отлично смотрятся на первый взгляд. Как насчет ваших пользовательских отображений? Похоже, одно и то же имя пользователя отображается как на ролях пользователя, так и для администратора.