2012-05-06 12 views
6

私は、ばねカンガルーことによってそれを学んでいるときに私は、私のウェブを確保するために、バネのセキュリティを使用するには<http>ノードでは、ApplicationContextの-のsecurity.xmlに設定ファイルを生成:スプリングセキュリティは "?パラメータ"形式と一致できません。

<intercept-url pattern="/userses?form" access="hasRole('ROLE_ADMIN')" /> 

作成するとき、それは意味しますUsersオブジェクトは、まずADMIN権限を得るためにログインする必要があります。しかし、実際には機能しませんでした。ログをチェックしてください:?文字列が一致しなかったとして、

2012-05-06 11:39:11,250 [http-8088-7] DEBUG org.springframework.security.web.util.AntPathRequestMatcher - Checking match of request : '/userses'; against '/userses?form' 

フレームワークは、/ usersesの代わりに/ usersesを使用して比較するために、フォーム認証プロセスをスキップ。これを確認するために、私はまた、別のURLを試してみてください。

<intercept-url pattern="/userses/abc" access="hasRole('ROLE_ADMIN')" /> 

私は/ userses/ABC要求し、それはユーザが許可されていない検出、およびへ/ログインページを移動し、ログを確認:だから

2012-05-06 11:46:44,343 [http-8088-7] DEBUG org.springframework.security.web.util.AntPathRequestMatcher - Checking match of request : '/uesrses/abc'; against '/userses/abc' 

私の質問は:春のセキュリティ3サポート "パラメータ"パターンか私はこれをサポートするために設定するために何かを逃したのですか? PS:すべてのコードはrooによって修正されずに生成されますが、なぜ動作しないのか不思議です。

答えて

6

デフォルトでは、spring securityは、パラメータに一致しないantスタイルマッチングを使用します。正規表現のマッチングは、しかし、はパラメータ

試合はそうのようにそれを定義してくださいすることができます:Rooのは、これを自動的に行いませんなぜ

<http request-matcher="regex"> 
    <security:intercept-url pattern="\A/userses\?form.*\Z" access="hasRole('ROLE_ADMIN')" /> 
</http> 

は知ってはいけません。それはすべきだと思われる。

+0

ありがとうございます。私はあなたが答えを知っているかもしれないと思う別の質問。 @Secureメソッドは私のためには機能しませんでした。 applicationContext-security.xmlにタグを追加し、依存関係を満たすようにpom.xmlを変更しました。コントローラのメソッドの上に@Secured( "ROLE_ADMIN")みんながこのメソッドにアクセスすることができる役割に関係なく、何か間違っていますか? @Secured( "ROLE_ADMIN") @RequestMapping(値= "abc"、メソッド= RequestMethod.GET、生成= "text/html") public String create(){ return Users.getString(); // myCreate ); } – JerryCai

+0

@JerryCaiおそらく、あなたは新しい質問を開くべきです。コメントの中のコードを読むのは難しいですし、それが別の問題としてそれを見つけることができれば、同じ問題を持つ他の人を助けるでしょう。 –

+0

それでは、ありがとう、ありがとう。 – JerryCai

6

この動作は、使用中の"request-matcher"によって定義されます。ドキュメントに示されているように、デフォルトは "ant"で、AntPathRequestMatcherを使用し、代替は "regex"、RegexRequestMatcherです。 javadocs(リンクされたもの)は、マッチャに関する詳細を提供します。マッチャはリクエストの "servletPath + pathInfo"と一致し、後者は "servletPath + pathInfo + queryString"と照合します。

+0

ティムが言ったこと:新しい質問を始める。コメントに質問を埋め込まないでください。 –

+0

それでは、ありがとう、ありがとう。 – JerryCai

関連する問題