2013-03-14 5 views
2

Я заменяю Siteminder Apache Shiro в своем веб-приложении. Я заметил, что сиро ведет меня успешно и ведет на домашнюю страницу. Когда я нажимаю на любую другую ссылку на домашней странице, я возвращаюсь на страницу входа. Я снова вхожу в систему, и меня пересылают на страницу, на которой я искал goto. Как я могу это исправить?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() в 'истинный' Мой класс отображает пользователей.

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

ответ

0

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

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

Спасибо за разъяснение этого! Надеюсь, это поможет другим пользователям WebLogic в будущем. –

+0

Я использую wildfly 10. Тот же вопрос. Еще нет решения. – mwangi

1

Ваша конфигурация выглядит почти точно так же, как и Shiro sample web app (на самом деле, ваш вариант еще лучше, используя authc.loginUrl вместо устаревшего глобального «shiro.loginUrl», который использует образец приложения). Пример приложения не показывает поведение, которое вы видите.

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

+0

Я создал версию голой кости приложения, и она отлично работала. Я должен теперь найти то, что в моем приложении вызывает это. Я ничего не менял в своем существующем web.xml или struts-config.xml. Я отчитаюсь, когда узнаю, что пошло не так. Благодаря!! – user1187958

+0

Я понял, что происходит. Мое приложение было развернуто в Weblogic, и у меня был следующий раздел внутри weblogic.xml, который вызывал проблему. Удалив его, исправьте. Любая идея, почему это вызвало это? <сеанс пары> \t CookieSecure \t правда ' – user1187958

2

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

ssl.enabled=false 

Однако в файле weblogic.xml вы исполнение SSL для печенья :

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

Итак, моя рекомендация будет изменить shiro.ini к:

ssl.enabled=true

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

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

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

Благодаря Фабио @fcerullo

+0

В DEV мы не используем SSL. Мы включили SSL только в UAT и Production. Я думаю, что ваш ответ имеет смысл. Я проверю его, когда перейдем к нашей среде с поддержкой SSL. Благодаря! – user1187958

+0

Привет, пожалуйста, дайте мне знать результаты. Кроме того, не могли бы вы проголосовать за меня, если она решит вашу проблему? Еще раз спасибо, Фабио – fcerullo

0

я испытал такое же поведение, но я использую Wildfly 10.0.0 и Apache Shiro v 1.3.2.

Я создаю решение здесь, в статье this Jboss Forum.

Установка имени печенья от JSESSIONID к чему-то еще устраняет проблему.

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

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

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

Смежные вопросы