Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I have list of all users logged in (via spring security) my web application

I'm using spring security in my web application, and now I want to have a list of all users who are logged in my program.

How can I have access to that list? Aren't they already kept somewhere within spring framework? Like SecurityContextHolder or SecurityContextRepository?

like image 941
Matin Kh Avatar asked Jun 30 '12 04:06

Matin Kh


People also ask

How do I get all users in spring boot?

For accessing the list of all logged in users you need to inject SessionRegistry instance to your bean. But before injecting session registry you need to define session management part in your spring-security.

What is SecurityContextHolder getContext () getAuthentication ()?

The HttpServletRequest.getUserPrincipal() will return the result of SecurityContextHolder.getContext().getAuthentication() . This means it is an Authentication which is typically an instance of UsernamePasswordAuthenticationToken when using username and password based authentication.


1 Answers

For accessing the list of all logged in users you need to inject SessionRegistry instance to your bean.

@Autowired @Qualifier("sessionRegistry") private SessionRegistry sessionRegistry; 

And then using injcted SessionRegistry you can access the list of all principals:

List<Object> principals = sessionRegistry.getAllPrincipals();  List<String> usersNamesList = new ArrayList<String>();  for (Object principal: principals) {     if (principal instanceof User) {         usersNamesList.add(((User) principal).getUsername());     } } 

But before injecting session registry you need to define session management part in your spring-security.xml (look at Session Management section in Spring Security reference documentation) and in concurrency-control section you should set alias for session registry object (session-registry-alias) by which you will inject it.

    <security:http access-denied-page="/error403.jsp" use-expressions="true" auto-config="false">         <security:session-management session-fixation-protection="migrateSession" session-authentication-error-url="/login.jsp?authFailed=true">              <security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" expired-url="/login.html" session-registry-alias="sessionRegistry"/>         </security:session-management>      ...     </security:http> 
like image 147
dimas Avatar answered Sep 17 '22 19:09

dimas