Spring-bootアプリにOauth2を実装しました。私のsecurity-context.xmlには、次の行があります-
<sec:intercept-url pattern="/trusted/**" access="isAnonymous()" />
<sec:intercept-url pattern="/**" access="isFullyAuthenticated()" />
/ trustedの下にあるすべてのものを認証なしで使用できるようにしたい。ただし、/ trustedリソースにアクセスしようとすると、認証が求められます(これらはRESTfulリソースです)。
私は何か他のものを逃しましたか?
[編集:]「提供された」Tomcatインスタンスでこのアプリを実行しています。
信頼できるインターセプト式のaccess
属性を置き換えるだけで機能します。
<sec:intercept-url pattern="/trusted/**" filters="none" />
<sec:intercept-url pattern="/**" access="isFullyAuthenticated()" />
Spring Security 3.1はfilters
を非推奨にしていますが、同じ効果を得るにはhttp
タグを使用する必要があります。
<http pattern="/trusted/**" security="none"/>
<http auto-config='true'>
<intercept-url pattern="/**" access="isFullyAuthenticated()" />
<form-login login-page='/login.jsp'/>
</http>
<http>
<intercept-url pattern="/trusted/**" access="ROLE_USER,ROLE_GUEST" />
<intercept-url pattern="/messagePost.htm*" access="ROLE_USER" />
<intercept-url pattern="/messageDelete.htm*" access="ROLE_ADMIN" />
<anonymous username="guest" granted-authority="ROLE_GUEST" />
<remember-me />
</http>
<anonymous username="guest" granted-authority="ROLE_GUEST" />
ROLE_GUESTのような役割を定義し、上記のコードが何をするかのように言及することができます。すべての匿名メンバーがROLE_GUESTのURLパターンにアクセスできます
設定が間違っています。次に、何が起こっているのかをイメージし、/trusted/**
の下にあるすべてへの匿名アクセスを許可するようにSpringセキュリティに指示していますが、/**
の下にあるすべての匿名アクセスを制限するようにもう一度指示しています。アプリケーションは明らかに/trusted/**
へのアクセスも制限します。
設定を次のように変更する必要があります:
<sec:intercept-url pattern="/trusted/**" access="isAnonymous()" />
<sec:intercept-url pattern="/secure/**" access="isFullyAuthenticated()" />
そしてそれは動作します。