我在我的网络应用程序中用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”。
我能提供其他信息吗?
答案 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
这对我有用。