Apache Shiro возвращает меня на страницу входа после аутентификации

Я заменяю Siteminder на Apache Shiro в своем веб-приложении. Я заметил, что Широ успешно регистрирует меня и ведет на домашнюю страницу. Когда я нажимаю на любую другую ссылку на домашней странице, я возвращаюсь на страницу входа. Я снова захожу на сайт и перенаправляюсь на страницу, которую я искал, чтобы перейти Как я могу это исправить?

Вот мой shiro.ini

[main]
authc.loginUrl = /login.jsp
ssl.enabled=false

[users]
user=admin

[urls]
/css/** = anon
/images/** = anon
/js/** = anon
/login.jsp = authc
/logout = logout
/** = authc

Раздел из моего web.xml

<listener>
    <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<filter>
    <filter-name>ShiroFilter</filter-name>
    <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>       
</filter>

<filter-mapping>
    <filter-name>ShiroFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>ERROR</dispatcher>      
</filter-mapping>

Распечатка currentUser.isAuthenticated() в моем классе пользователя отображает "true".

Есть ли другая информация, которую я могу предоставить?

4 ответа

Решение

Я понял, что происходит. Мое приложение было развернуто в Weblogic, и у меня был следующий раздел внутри weblogic.xml, который вызывал проблему. Сняв это, исправил это. Есть идеи, почему это вызвало это?

<session-param>     
<param-name>CookieSecure</param-name>
<param-value>true</param-value>
</session-param>

Я полагаю, что проблема связана с тем, что в файле shiro.ini вы не используете SSL:

ssl.enabled=false

Однако в файле weblogic.xml вы применяете SSL для файлов cookie:

<session-param>     
<param-name>CookieSecure</param-name>
<param-value>true</param-value>
</session-param>

Поэтому я рекомендую изменить shiro.ini на:

ssl.enabled=true

И оставьте оригинальный файл weblogic.xml на месте.

Таким образом, вы будете принимать только тех пользователей, которые прошли аутентификацию по SSL (что является хорошей практикой).

Пожалуйста, дайте мне знать результаты.

Спасибо Фабио @fcerullo

Ваша конфигурация выглядит почти так же, как пример веб-приложения Shiro (на самом деле, ваша конфигурация даже лучше, если использовать authc.loginUrl вместо устаревшего глобального shiro.loginUrl, который используется в этом приложении). Образец приложения не демонстрирует поведение, которое вы видите.

Это заставляет меня верить, что что-то еще (еще один фильтр?) Создает вам проблемы. У вас есть небольшое примерное приложение, которое вы можете сделать доступным (возможно, на Github), которое демонстрирует проблему? Я был бы счастлив взглянуть, если это можно воссоздать.

У меня такое же поведение, но я использую Wildfly 10.0.0 и apache shiro v 1.3.2.

Я нашел решение здесь, в этой статье на форуме Jboss.

Установка имени файла cookie из JSESSIONID что-то еще решает проблему.

Решение, предоставленное здесь, состояло в том, чтобы добавить следующее в shiro.ini

sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
cookie = org.apache.shiro.web.servlet.SimpleCookie
cookie.name = shiro.session.id
sessionManager.sessionIdCookie = $cookie

Это сработало для меня.

Другие вопросы по тегам