Estoy usando spring-security con HTTP Basic Auth para asegurar una aplicación web java. En mi aplicación web, necesito obtener el nombre de usuario y la contraseña del usuario actual para autenticarlos aún más en otro servicio. Puedo obtener el nombre de usuario, pero no la contraseña.Recuperar la contraseña del usuario actual de spring-security
He intentado utilizar SecurityContextHolder.getContext().getAuthentication()
para acceder a esta información como se sugiere aquí How can I get plaintext password from spring-security? pero la contraseña se devuelve como null
.
¿Cómo puedo obtener la contraseña?
Gracias.
Esta es mi 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>
no estoy usando yo recuerde, ejecutar como usuario o cambiar por lo que yo soy consciente (a menos que estén habilitados por defecto ? No estoy usando autoconfiguración). Tampoco puedo usar la autenticación de formulario ya que mi aplicación web es un servicio web. – ssloan
bien, entonces, ¿cómo informa a SI que el usuario ha sido autenticado con éxito? Si usa SecurityContextHolder.getContext(). SetAuthentication (...), ¿qué tipo de token pasa? –
No estoy llamando a setAuthentication() directamente: debe estar sucediendo en uno de los beans que he configurado. Actualizaré mi publicación con mi applicationContext-security.xml por si acaso. – ssloan