[SPRING] 스프링 한계 최대 세션; 최대 사용자 수 제한
SPRING스프링 한계 최대 세션; 최대 사용자 수 제한
나는 봄 보안을 사용하여 동시에 웹 사이트에 로그인 할 수있는 최대 사용자 수를 제한 할 수 있음을 알고 있습니까?
확실히, 동시 세션 제어 매개 변수가 아닙니다. 내가 원한 것은 예를 들어, 최대 1000 명의 사용자가 동시에 로그인 할 수 있도록 제한하고 싶습니다. 최대 사용자 수가 초과되었음을 알리는 포워드 통보 페이지 이상
해결법
-
==============================
1.SessionRegistry에 액세스하여 현재 로그인중인 사용자 수를 봄으로써 Spring Security의 동시 세션 제어를 사용할 수 있습니다. Spring Security 3에서 ConcurrentSessionControlStrategy는 로그인 후 사용자가 세션을 생성 할 수 있는지 여부를 제어합니다. 이 클래스를 선택하고 사용자 수에 따라 추가 검사를 추가하십시오.
SessionRegistry에 액세스하여 현재 로그인중인 사용자 수를 봄으로써 Spring Security의 동시 세션 제어를 사용할 수 있습니다. Spring Security 3에서 ConcurrentSessionControlStrategy는 로그인 후 사용자가 세션을 생성 할 수 있는지 여부를 제어합니다. 이 클래스를 선택하고 사용자 수에 따라 추가 검사를 추가하십시오.
public class MySessionAuthenticationStrategy extends ConcurrentSessionControlStrategy { int MAX_USERS = 1000; // Whatever SessionRegistry sr; public MySessionAuthenticationStrategy(SessionRegistry sr) { super(sr); this.sr = sr; } @Override public void onAuthentication(Authentication authentication, HttpServletRequest request, HttpServletResponse response) { if (sr.getAllPrincipals().size() > MAX_USERS) { throw new SessionAuthenticationException("Maximum number of users exceeded"); } super.onAuthentication(authentication, request, response); } }
그런 다음 Spring Security 레퍼런스 매뉴얼에 설명 된대로 이것을 보안 네임 스페이스에 주입한다.
Spring Security 2.0에서는 동시 세션 제어가 약간 다르게 구현되며 대신 ConcurrentSessionController를 사용자 정의합니다.
-
==============================
2.코멘트를 추가 할만큼 충분한 평판이 없습니다. 그러나 getAllPrincipals는 만료 된 세션의 주체를 포함하여 모든 주체를 반환합니다. getAllActiveSessions에는 다음과 같은 메소드를 사용하십시오.
코멘트를 추가 할만큼 충분한 평판이 없습니다. 그러나 getAllPrincipals는 만료 된 세션의 주체를 포함하여 모든 주체를 반환합니다. getAllActiveSessions에는 다음과 같은 메소드를 사용하십시오.
private List<SessionInformation> getActiveSessions(SessionRegistry sessionRegistry) { final List<Object> principals = sessionRegistry.getAllPrincipals(); if (principals != null) { List<SessionInformation> sessions = new ArrayList<>(); for (Object principal : principals) { sessions.addAll(sessionRegistry.getAllSessions(principal, false)); } return sessions; } return Collections.emptyList(); }
-
==============================
3.이 게시물은 약간 오래된 것이지만 나는 스프링 보안 4.1에서 같은 문제를 겪었고 그런 식으로 해결했다.
이 게시물은 약간 오래된 것이지만 나는 스프링 보안 4.1에서 같은 문제를 겪었고 그런 식으로 해결했다.
세션 관리
<security:http disable-url-rewriting="true" use-expressions="true" auto-config="true"> <security:session-management invalid-session-url="/app/login" session-authentication-strategy-ref="sessionAuthenticationStrategy"> </security:session-management> </security:http>
session-authentication-strategy-ref
<bean id="sessionAuthenticationStrategy" class="org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy"> <constructor-arg> <list> <bean class="org.springframework.security.web.authentication.session.ConcurrentSessionControlAuthenticationStrategy"> <constructor-arg ref="sessionRegistry"/> <property name="maximumSessions" value="1" /> <property name="exceptionIfMaximumExceeded" value="true" /> </bean> <bean class="org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy"> </bean> <bean class="org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy"> <constructor-arg ref="sessionRegistry"/> </bean> </list> </constructor-arg> </bean>
SessionRegistry
@Autowired private SessionRegistry sessionRegistry;
입증
List<SessionInformation> sessions = new ArrayList<>(); for (Object principal : sessionRegistry.getAllPrincipals()) { sessions.addAll(sessionRegistry.getAllSessions(principal, false)); } LOGGER.info("Sessiones Activas: " + sessions.size()); // filtro para limite de sessiones if (sessions.size() < max_sessions) { //authentication } else { throw new SessionAuthenticationException("Maximo numero de Usuarios exedido."); }
내가 보안에 기반하여 인증하기 때문에 이런 식으로 : custom-filter
from https://stackoverflow.com/questions/2106601/spring-limit-max-sessions-limit-max-users by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] SSL을 통해 mysql에 연결할 봄 구성 (0) | 2019.02.09 |
---|---|
[SPRING] OpenEntityManagerInViewFilter 문제 (0) | 2019.02.09 |
[SPRING] 액추에이터 / 새로 고침이 스프링 부트 2.0.1에서 제공되지 않음 (0) | 2019.02.09 |
[SPRING] 스프링 부트와 임베디드 Tomcat으로이 속성을 어떻게 구성합니까? (0) | 2019.02.09 |
[SPRING] 리소스 파일을 찾을 수없는 봄 (CSS, JSP 등 ...) (0) | 2019.02.09 |