Obter todos os usuários registrados no Spring Security
Gostaria de obter uma lista de todos os usuários que estão atualmente registrados no meu aplicativo. Eu sei que devo injetarSessionRegistry
no meu código para ligargetAllPrincipals()
método. Infelizmente, eu sempre fico com uma lista vazia. Parece queSessionRegistry
não é popular e eu não sei como fazer isso. Eu sei, que no StackOverflow existem perguntas parecidas, mas ainda tenho problema em resolver meu problema. Em primeiro lugar, adiciono ao meu web.xml este código:
<listener>
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class>
</listener>
Como eu sei, permite obter informações sobre o ciclo de vida (criar, destruir) de sessões. E isso é tudo. Eu tenho um grande problema em seguir em frente. Meu arquivo com beans de segurança é apresentado abaixo:
<beans:bean id="successAuth" class="pl.fp.microblog.auth.SuccessAuth"/>
<beans:bean id="failureAuth" class="pl.fp.microblog.auth.FailureAuth"/>
<http auto-config="true">
<intercept-url pattern="/" access="ROLE_USER" />
<intercept-url pattern="/profile/*" access="ROLE_USER" />
<form-login
login-page="/login"
authentication-success-handler-ref="successAuth"
authentication-failure-handler-ref="failureAuth"
username-parameter="username"
password-parameter="password"
login-processing-url="/login_processing_url"
/>
<security:logout logout-url="/logout_processing_url"/>
<session-management>
<concurrency-control max-sessions="1" session-registry-alias="sessionRegistry"/>
</session-management>
</http>
<beans:bean id="saltProvider" class="org.springframework.security.authentication.dao.ReflectionSaltSource">
<beans:property name="userPropertyToUse" value="username"></beans:property>
</beans:bean>
<beans:bean id="userService" class="pl.fp.microblog.auth.UserService">
<beans:property name="userDAO" ref="userDAO"/>
</beans:bean>
<authentication-manager>
<security:authentication-provider user-service-ref="userService">
<password-encoder hash="sha-256">
<security:salt-source ref="saltProvider"/>
</password-encoder>
</security:authentication-provider>
</authentication-manager>
Aqui eu chamo o método getAllPrinciples ():
@Transactional
@Controller
public class SiteController {
@Autowired
private UserDAO userDAO;
@Autowired
private SessionRegistry sessionRegistry;
@RequestMapping(value = "profile/{login}")
public String profilePage(@PathVariable String login, HttpServletRequest req) throws SQLException {
...
sessionRegistry.getAllPrincipals().size()
...
return "profile";
}
}
Eu tentei adicionarsession-managemenent
código no meuhttp
, ConcurrentSessionFilter
e coisas semelhantes, mas na verdade eu não entendo isso. E a documentação é muito complexa para mim. Alguém poderia me ajudar e dizer passo a passo o que fazer a seguir? Quais beans devo adicionar?