sociales seguridad redes protección privatizar privacidad medidas las datos como facebook spring spring-security spring-social

redes - Spring Social facebook+Seguridad de primavera



seguridad en facebook 2018 (1)

Quiero integrar Spring Social facebook en mi aplicación con Spring Security (utilizo las configuraciones xml). Todo lo que necesito es simplemente conectar mi cuenta de Facebook con la cuenta de mi aplicación. En un simple ejemplo, encontré esto:

<bean id="connectionRepository" factory-method="createConnectionRepository" factory-bean="usersConnectionRepository" scope="request"> <constructor-arg value="#{request.userPrincipal.name}" /> <aop:scoped-proxy proxy-target-class="false" /> </bean>

Entonces, como entendí, este método entra en juego:

public ConnectionRepository createConnectionRepository(String userId) { if (userId == null) { throw new IllegalArgumentException("userId cannot be null"); } return new JdbcConnectionRepository(userId, jdbcTemplate, connectionFactoryLocator, textEncryptor, tablePrefix); }

Rescata " userId " de #{request.userPrincipal.name} . Entonces, mi pregunta: ¿cómo puedo pasar " userId " a este método si quiero obtener este " userId " usando SecurityContextHolder.getContext().getAuthentication().getPrincipal() .

La única forma que veo es crear mi implementación de JdbcUsersConnectionRepository y redefinir el createConnectionRepository(String userId) . Pero tal vez haya una solución más elegante.


Hay otra manera:

<bean id="connectionRepository" factory-method="createConnectionRepository" factory-bean="usersConnectionRepository" scope="request"> <constructor-arg value="#{authenticationService.getAuthenticatedUsername()}" /> <aop:scoped-proxy proxy-target-class="false" /> </bean> @Service("authenticationService") public class AuthenticationService { public String getAuthenticatedUsername() { return SecurityContextHolder.getContext().getAuthentication().getPrincipal(); } }

Puedes hacerlo de manera completa también en SPEL (no me gustan este tipo de dependencias):

<bean id="connectionRepository" factory-method="createConnectionRepository" factory-bean="usersConnectionRepository" scope="request"> <constructor-arg value="#{T(org.springframework.security.core.context.SecurityContextHolder).getContext().getAuthentication().getPrincipal()}" /> <aop:scoped-proxy proxy-target-class="false" /> </bean>