1

Spring セキュリティを使用するアプリケーションで問題が発生しました。セキュリティ構成ファイルに http タグの次の構成があります。

 <http auto-config="true" use-expressions="true" path-type="regex">
     <intercept-url pattern="\A/hero.jsp/$?chooseHero=\Z" access="hasRole('ROLE_HERO')" />
     <intercept-url pattern="/.*" access="permitAll" />
     <logout logout-success-url="/" />              
 </http>

最初のインターセプト URL に問題があります - アドレスが一致しません。これは基本的に、誰でもアプリケーションの /hero.jsp/$?chooseHero= セクションにアクセスできることを意味します。何か不足していますか?のみを使用する場合:

   <intercept-url pattern="\A/hero.jsp\Z" access="hasRole('ROLE_HERO')" />

すべてがうまく機能します。

データベースベースの認証を実装しています。

この問題について誰か助けてくれませんか?ヒントやアイデアをありがとう。

4

1 に答える 1

0

最初のインターセプト URL は有効な正規表現である必要があり、RegexRequestMatcherによって処理されます。これは奇妙な正規表現です:

pattern="\A/hero.jsp/$?chooseHero=\Z"

なぜ必要なの$ですか?文字通り一致することを意図していますか (正規表現では特別な意味があります)? そうなんだろうなぁ… また、.?には特別な意味があります。

すべての文字を文字通り一致させたいと仮定すると、次のようにする必要があります。

pattern="\A/hero\.jsp/\$\?chooseHero=\Z"

ただし、すべてが文字通り一致する場合、なぜ正規表現が必要なのですか? 手間を省いて、より単純なAnt スタイルの matcher を使用することもできます。

于 2013-01-05T14:33:56.597 に答える