2

WebアプリケーションでSiteminderをApacheShiroに置き換えています。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

4 に答える 4

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を介して認証されたユーザーのみを受け入れることができます(これは良い習慣です)。

結果を教えてください。

ありがとうFabio@fcerullo

于 2013-03-30T14:21:52.380 に答える
1

構成は、 ShiroサンプルWebアプリとほぼ同じように見えます(実際、サンプルアプリが使用する非推奨のグローバル「shiro.loginUrl」の代わりにauthc.loginUrlを使用すると、さらに優れたものになります)。サンプルアプリは、表示されている動作を示していません。

これにより、他の何か(別のフィルター?)が問題を引き起こしていると私は信じます。問題を実証するために(おそらくGithubで)利用できるようにすることができる小さなサンプルアプリがありますか?これを再現できるかどうか見ていきたいと思います。

于 2013-03-15T17:01:35.347 に答える
0

私は何が起こっているのか理解しました。私のアプリケーションはWeblogicにデプロイされ、問題の原因となっているweblogic.xml内に次のセクションがありました。それを削除し、修正しました。なぜこれがそれを引き起こしたのか考えていますか?

<session-param>     
<param-name>CookieSecure</param-name>
<param-value>true</param-value>
</session-param>
于 2013-03-19T18:20:12.417 に答える
0

同じ動作を経験しましたが、Wildfly10.0.0とapacheshirov1.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

これは私のために働いた。

于 2016-11-12T22:17:04.780 に答える