Я очень плохо знаком с безопасностью EJB и аутентификацией GlassFish, механизмом авторизации. У меня есть a jdbc
область и настроенный sun-web.xml
и web.xml
отобразить роли и ограничить доступ к странице.
Однако моя проблема состоит в том, что, когда я ограничиваю доступ ко всем страницам, он работает и инициировал всплывающее окно входа в систему прежде, чем загрузить страницу приветствия (использующий Стандартную аутентификацию).
<web-resource-collection>
<web-resource-name>All Pages</web-resource-name>
<description/>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
но когда я ограничиваю доступ к странице в папке security
, GlassFish не запрашивает вход в систему и перенаправляет пользователя к ограниченной странице.
<web-resource-collection>
<web-resource-name>All Pages</web-resource-name>
<description/>
<url-pattern>/security/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>`
Помогите мне решить эту проблему.. Большое спасибо заранее.
Я также нашел эти записи после того, как я включил менеджера безопасности
Processing login with credentials of type: class com.sun.enterprise.security.auth.login.PasswordCredential
Logging in user [admin] into realm: admin-realm using JAAS module: fileRealm
Login module initialized: class com.sun.enterprise.security.auth.login.FileLoginModule
File login succeeded for: admin
JAAS login complete.
JAAS authentication committed.
Password login succeeded for : admin
permission check done to set SecurityContext
Set security context as user: admin
[Web-Security] hasResource perm: (javax.security.jacc.WebResourcePermission /faces/security/UserRedirect.jsp GET)
кажется, что администраторский принципал в администраторской области автоматически аутентифицируется и используется для моего приложения вместо того, чтобы использовать мой jdbcrealm. Какие-либо мысли о том, как зафиксировать это?
Обновление
Я сожалею, что просто изменил аутентификацию для формирования для проверки. Я возвратил его к ОСНОВНОМУ снова. И да у меня есть имя jdbcrealm как область по умолчанию.
Ваше право.. это - точно это
GlassFish не перенаправляет к странице формы входа в систему, и доступ к ограниченным ресурсам не ограничивается
Я думаю, что это - потому что администратор администраторской области автоматически аутентифицируется и когда я пытаюсь получить доступ к ограниченной странице, это проверяет аутентифицируемого пользователя и так как это - администратор, и это имеет авторизацию к странице, страница доступна и не запрашивает для входа в систему.
Они все еще появляются, когда я запускаю приложение и не пытающийся войти в консоль администрирования стеклянной рыбы
Processing login with credentials of type: class com.sun.enterprise.security.auth.login.PasswordCredential
Logging in user [admin] into realm: admin-realm using JAAS module: fileRealm
Login module initialized: class com.sun.enterprise.security.auth.login.FileLoginModule
File login succeeded for: admin
JAAS login complete.
JAAS authentication committed.
Password login succeeded for : admin
permission check done to set SecurityContext
Set security context as user: admin
Также они
(unresolved javax.security.jacc.WebUserDataPermission /security/* null)
(unresolved javax.security.jacc.WebUserDataPermission /:/security/* null)
(unresolved com.sun.corba.ee.impl.presentation.rmi.DynamicAccessPermission access null)
(unresolved javax.security.jacc.WebResourcePermission /:/security/* null)
(unresolved javax.security.jacc.WebResourcePermission /security/* !DELETE,GET,HEAD,OPTIONS,POST,PUT,TRACE)
(unresolved com.sun.enterprise.security.CORBAObjectPermission * *)
Обновление 2
Я пытался использовать <url-pattern>/*</url-pattern>
вместо <url-pattern>/security/*</url-pattern>
и интересно это - то, что я вошел в трассировку.
Processing login with credentials of type: class com.sun.enterprise.security.auth.login.PasswordCredential
Logging in user [employee] into realm: emsSecurity using JAAS module: jdbcRealm
Login module initialized: class com.sun.enterprise.security.auth.login.JDBCLoginModule
JDBC login succeeded for: employee groups:[Ljava.lang.String;@16bfca4
JAAS login complete.
JAAS authentication committed.
Password login succeeded for : employee
permission check done to set SecurityContext
Set security context as user: employee
и это переходит к странице доступа запрещен.
'Состояние HTTP 403 - Доступ к требуемому ресурсу было отклонено'
Я не понимаю, как glassfish аутентифицирует пользовательского сотрудника без пользователя, отправляющего данные для входа в систему. Это даже говорит 'Вход в систему пароля, для которого следуют: сотрудник'. Помогите мне решить эту проблему.
Кулак всего большое спасибо за Ваши усилия. Я все еще застреваю с проблемой. Я отправляю здесь XML-файлы.
sun-web.xml
<security-role-mapping>
<role-name>Employee</role-name>
<group-name>Employee</group-name>
web.xml
<security-constraint>
<display-name>Login Constraint</display-name>
<web-resource-collection>
<web-resource-name>User Redirect page</web-resource-name>
<description/>
<url-pattern>/security/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>Employee</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>deliverySecurity</realm-name>
<form-login-config>
<form-login-page>/Login.jsp</form-login-page>
<form-error-page>/index.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<description/>
<role-name>Employee</role-name>
</security-role>
Также нет никакого отслеживания стека. Никакое исключение.. Пользователь просто перенаправляется к защищенной странице, как будто нет никаких требований аутентификации. Это - jsf визуальный проект веб-разработки использование Netbeans 6.5.1 и Glassfish v2.Большое спасибо.
Не могли бы вы опубликовать все соответствующие части вашего web.xml
, потому что я сделал тест с этим web.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Archetype Created Web Application</display-name>
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/jsp/security/protected/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>role1</role-name>
</auth-constraint>
</security-constraint>
<!-- Security roles referenced by this web application -->
<security-role>
<role-name>role1</role-name>
</security-role>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
И запрос защищенного ресурса ( http: // localhost: 8080 / mywebapp / jsp / security / protected / здесь) подсказывает мне для имени пользователя и пароля. Другими словами, я не могу воспроизвести проблему (я использовал GlassFish v3).
Обновление: Я закончил защищать свой образец веб-приложения областью jdbc
и подтверждаю, что все работает нормально. Итак, как я уже сказал, предоставьте свои web.xml
и sun-web.xml
. Кроме того, для обеспечения безопасности установите уровень ведения журнала FINEST:
И присоединитесь к соответствующим трассировкам.
Обновление: Я думаю, что трассировки, которые вы показываете, предназначены для входа пользователя admin в консоль администратора. Если нет, вы установили область jdbc в качестве области по умолчанию ( база данных - это моя область jdbc в следующем фрагменте)?
Кстати, я думал, вы используете BASIC-аутентификацию. Но в соответствии с указанным вами дескриптором вы используете FORM. Итак, не могли бы вы пояснить, что вы на самом деле используете и в чем именно заключается проблема (например: «GlassFish не перенаправляет на страницу формы входа и доступ к ограниченным ресурсам не ограничен»)?
Если вы используете NetBeans 6.8, вы можете проверить, что свойство «Сохранять сеансы при повторном развертывании» не отмечено флажком.
Почему? Похоже, вы сначала протестировали случай «заблокировать все» (и смогли успешно войти в систему). Когда вы изменили файл web.xml на использование / security / *, ваш старый сеанс все еще был действителен и вошел в систему, поэтому ... вы переходите прямо на страницу, вместо того, чтобы пройти проверку подлинности.
Адаптер сервера для Eclipse также имеет эту функцию.