身份验证后,Apache Shiro将我带回登录页面

时间:2013-03-14 20:37:55

标签: shiro

我在我的网络应用程序中用Apache Shiro替换Siteminder。我注意到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 个答案:

答案 0 :(得分:2)

我认为问题与shiro.ini文件中没有强制执行SSL的事实有关:

ssl.enabled=false

但是,在weblogic.xml文件中,您要为Cookie强制执行SSL:

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

所以,我的建议是将shiro.ini改为:

ssl.enabled=true

保留原始的weblogic.xml文件。

这样您就只会接受通过SSL验证的用户(这是一种很好的做法)。

请告诉我结果。

由于 法比奥@fcerullo

答案 1 :(得分:1)

您的配置看起来几乎与Shiro sample web app完全相同(实际上,使用authc.loginUrl代替示例应用程序使用的弃用全局'shiro.loginUrl',您的配置更好)。示例应用程序不会显示您正在看到的行为。

这让我相信其他东西(另一个过滤器?)会给你带来麻烦。你有一个小样本应用程序,你可以提供(可能在Github上),以证明问题?如果可以重新创建,我很乐意看看。

答案 2 :(得分:0)

我弄清楚发生了什么事。我的应用程序部署在Weblogic上,我在weblogic.xml中有以下部分导致了这个问题。删除它,修复它。知道为什么会造成这种情况吗?

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

答案 3 :(得分:0)

我遇到过相同的行为,但我使用的是Wildfly 10.0.0和apache shiro v 1.3.2。

我在this Jboss Forum文章中找到了解决方案。

将Cookie名称从abc设置为其他内容可以解决问题。

此处提供的解决方案是在shiro.ini中添加以下内容

JSESSIONID

这对我有用。

相关问题