私は、Java Webアプリケーションを保護するためにHTTP Basic Authでspring-securityを使用しています。私のWebアプリケーションでは、別のサービスに対してさらに認証するために、現在のユーザーのユーザー名とパスワードを取得する必要があります。私は、パスワードではなく、ユーザー名を取得することができます。現在のユーザーのパスワードをspring-securityから取得します
SecurityContextHolder.getContext().getAuthentication()
を使用してこの情報にアクセスしようとしましたが、ここで示唆したようにHow can I get plaintext password from spring-security?ですが、パスワードはnull
として返されます。
パスワードを取得するにはどうすればよいですか?
ありがとうございました。
これは私のApplicationContext-のsecurity.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:sec="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<sec:http authentication-manager-ref='authenticationManager'>
<sec:intercept-url pattern="/spring/**" access="ROLE_USER" />
<sec:http-basic />
</sec:http>
<bean id="basicAuthenticationFilter"
class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationEntryPoint" ref="authenticationEntryPoint" />
</bean>
<bean id="authenticationEntryPoint"
class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
<property name="realmName" value="Announcements Rest Realm" />
</bean>
<bean id="authenticationManager"
class="org.springframework.security.authentication.ProviderManager">
<property name="providers">
<list>
<ref local="authProvider" />
</list>
</property>
</bean>
<bean id="authProvider"
class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userDetailsService" />
</bean>
<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
<constructor-arg>
<list>
<sec:filter-chain pattern="/spring/**" filters="basicAuthenticationFilter" />
</list>
</constructor-arg>
</bean>
<sec:user-service id="userDetailsService">
<sec:user name="admin" password="**" authorities="ROLE_USER, ROLE_ADMIN" />
<sec:user name="user" password="**" authorities="ROLE_USER" />
</sec:user-service>
それらはデフォルトで有効になっている場合を除き、私は(私を覚えて実行したり、私の知る限り承知しているように、ユーザーを切り替えて使用していませんよ?私は自動設定を使用していません)。また、WebアプリケーションがWebサービスであるため、フォーム認証を使用できません。 – ssloan
大丈夫ですので、ユーザーに認証が成功したことをSIに知らせるにはどうすればよいですか? SecurityContextHolder.getContext()。setAuthentication(...)を使用する場合は、どのような種類のトークンを渡しますか? –
私はsetAuthentication()を直接呼び出すのではありません。設定したBeanの1つで起きている必要があります。私は自分の投稿をapplicationContext-security.xmlで更新してくれます。 – ssloan