Glassfish создает более одного сеанса HTTP в аутентификации области

У меня есть вопрос об аутентификации области, когда стеклянная рыба создает более одного сеанса http. Вот пример

Веб.xml:

<security-constraint>
    <web-resource-collection>
      <web-resource-name>AllPages</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>user</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>FileRealm</realm-name>
  </login-config>
<security-constraint>

стеклянная рыба-web.xml:

  <security-role-mapping>
    <role-name>user</role-name>
    <group-name>users</group-name>
  </security-role-mapping>

логин.jsp:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome Page</title>
</head>
<body>
<p>You have successfully logged into the application.</p>
<a href="./home.jsp">go to home</a>
</body>
</html>

Прослушиватель сеансов:

Открытый класс @WebListener SessionListener реализует HttpSessionListener {

public void sessionCreated (HttpSessionEvent arg0) {

System.out.println("Идентификатор созданного сеанса:"+arg0.getSession().getId());
}

public void sessionDestroyed (HttpSessionEvent arg0) {

  System.out.println("Session destroyed id:"+arg0.getSession().getId());

}

}

Когда я аутентифицируюсь, стеклянная рыба создает новый сеанс:

ИНФОРМАЦИЯ: Идентификатор созданного сеанса: 29c5d904db0e40b9cfbdac40aa5e

И когда я нажимаю ссылку «перейти на главную» или обновляю страницу, стеклянная рыба создает еще один http-сеанс:

ИНФОРМАЦИЯ: Идентификатор созданного сеанса: 2a67270137e38c150bf3690e2e46

И я также заметил, что стеклянная рыба никогда не уничтожает первую созданную сессию.

Спасибо за вашу помощь


person kouzouigh    schedule 07.08.2012    source источник


Ответы (1)


Вероятно, это жук-стеклянная рыбка. Попробуйте добавить context.xml в каталог META-INF с помощью этой опции:

<?xml version='1.0' encoding='utf-8'?>
<Context>
<Valve className="org.apache.catalina.authenticator.BasicAuthenticator"
changeSessionIdOnAuthentication="false" />
</Context>

или (в случае аутентификации через веб-форму):

<?xml version='1.0' encoding='utf-8'?>
<Context>
<Valve className="org.apache.catalina.authenticator.FormAuthenticator"
changeSessionIdOnAuthentication="false" />
</Context>

Это должно (временно) решить вашу проблему!

person Piotr Filiciak    schedule 11.09.2012