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
Это сработало для меня.