2009-12-28 3 views
1

В настоящее время я тестирую JDBCRealm в Glasshfish v3: У меня есть 2 роли USER и ADMIN.request.isUserInRole ("ADMIN") также возвращает true для пользователя не в роли ADMIN, а в роли USER

У меня есть LoginServlet, который перенаправляет на url (say/admin или/user) на основе метода request.isUserInRole ("ADMIN").

Проблема в том, что ADMIN регистрируется в нем, возвращает значение true, поэтому перенаправляется в/admin, но он также может получить доступ к/пользователю. Когда USER регистрируется в request.isUserInRole («ADMIN») также возвращает true. request.isUserInRole ("NONEXISTINGROLE") возвращает false для обоих.

Например:

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

для LoggedIn USER: возвращает истинный истинный ложных

для LoggedIn ADMIN возвращает истину истинное ложное

Это часть моей 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> 

И мое солнце-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> 

Спасибо!

ответ

2

Исправлено, убедившись, что параметр Realm «Назначить группы» пуст. Glassfish загрузит их из таблицы групп.

0

Ваши сопоставления безопасности выглядят отлично на первый взгляд. Как насчет ваших пользовательских сопоставлений? Похоже, одно и то же имя пользователя отображается как на роли пользователя, так и на администратора.

+0

У меня есть 2 таблицы: Группа безопасности: id; groupId; userid; 1; ADMIN; 1 2; USER; 2 securityUser; идентификатор, пароль, идентификатор пользователя, работодатель 1; 21232f297a57a5a743894a0e4a801fc3; а; 1 2; ee11cbb19052e40b07aac0ca060c23ee; и; 2 –

+0

GlassFish Realm свойства: JAAS Контекст: jdbcRealm Пользователь таблица: securityuser пользователя Имя столбца: идентификатор Пароль Колонка: пароль Таблица групп: securitygroup Имя группы Столбец: groupId –

+0

Я нашел что-то: Если я установил параметр Realm «Назначить группы» USER, ADMIN, я получаю исходную проблему. Если и установить его на пустой, я могу войти, но доступ запрещен при всех ограничениях безопасности ... –