2012-07-05 15 views
8

カスタム認証プロバイダ内でHttpServletRequestにアクセスする方法を教えてください。私はこのカスタム認証プロバイダ内でHttpServletRequestへのアクセスを取得

RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); 

HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); 
String username = (String) httpReq.getAttribute("j_username"); 

OR

RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); 
HttpServletRequest httpReq = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest(); 

String username = (String) httpReq.getAttribute("j_username"); 

私は取得していますユーザ名のヌル

が、RequestContextHolder.getRequestAttributes()を実行しようとしています。 nullを返します。

私はrequestcontextを参照したり、渡したり、Springに魔法をさせて参照させたいと思っています。

私も私のweb.xmlに

<listener> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 

をRequestContextListenerを与えている

私はセキュリティのフォーラムを検索しましたが、それでもまだ何も見つけたhavent。

ありがとうございます。

+0

これらの資格情報をAuthenticationオブジェクトに含めるべきではありませんか? http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/authentication/AuthenticationProvider.html – dardo

+0

Dardoは正しいです。このようにしてユーザー名にアクセスしようとする正当な理由を考えることができないため、基本的なサンプルを見て、ドキュメントの一部を読んでから、達成しようとしていることをさらに詳しく説明する必要があります。 –

+0

認証情報は実際には認証オブジェクトに格納されます。しかし、私も解決策を探しています。私もリクエストにアクセスする必要がありますが、もう一つの理由があります。私のアプリではURLが認証の役割を果たします。どのようにこのクラスでそれを得るためのアイデア? – Wouter

答えて

8

私はちょうど私のweb.xmlにリスナーを追加し、RequestContextHolder.getRequestAttributes()はnullの代わりにRequestAttributesを返します。

<listener> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 

あなたはこのフィルタを拡張しないなぜあなたは、フォームをログインカスタマイズする場合:org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter

-2

使用request.getParameter( "j_username"); request.getAttribute( "j_username")の代わりに。

私のために働く。それがあなたを助けるかどうか見てください。

関連する問題