Вход в систему, не инициированный для ограниченной страницы в glassfish jdbcrealm аутентификация

Я очень плохо знаком с безопасностью 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.Большое спасибо.

5
задан Bill the Lizard 2 December 2011 в 18:07
поделиться

2 ответа

Не могли бы вы опубликовать все соответствующие части вашего 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:

alt text

И присоединитесь к соответствующим трассировкам.

Обновление: Я думаю, что трассировки, которые вы показываете, предназначены для входа пользователя admin в консоль администратора. Если нет, вы установили область jdbc в качестве области по умолчанию ( база данных - это моя область jdbc в следующем фрагменте)?

alt text

Кстати, я думал, вы используете BASIC-аутентификацию. Но в соответствии с указанным вами дескриптором вы используете FORM. Итак, не могли бы вы пояснить, что вы на самом деле используете и в чем именно заключается проблема (например: «GlassFish не перенаправляет на страницу формы входа и доступ к ограниченным ресурсам не ограничен»)?

2
ответ дан 14 December 2019 в 13:33
поделиться

Если вы используете NetBeans 6.8, вы можете проверить, что свойство «Сохранять сеансы при повторном развертывании» не отмечено флажком.

Диалоговое окно свойств сервера из NetBeans 6.8 для GlassFish v3 http://blogs.sun.com/vkraemer/resource/preserve-session.png

Почему? Похоже, вы сначала протестировали случай «заблокировать все» (и смогли успешно войти в систему). Когда вы изменили файл web.xml на использование / security / *, ваш старый сеанс все еще был действителен и вошел в систему, поэтому ... вы переходите прямо на страницу, вместо того, чтобы пройти проверку подлинности.

Адаптер сервера для Eclipse также имеет эту функцию.

0
ответ дан 14 December 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: