2012-04-13 1 views
0

습득 조건 :
사용자가 로그인 및 역할 userService의 사용자 지정 구현을 사용하여 데이터베이스에서 가져온 주어진다. 즉다른 봄 보안 당국과의 사용자를 Relogging 프로그램

인증 공급자 사용자 서비스-REF = "securityPolicyService"

구현 된 방법 loadUserByUsername 호출과 역할 그들이에 로그인하는 특정 클럽에 대한 사용자의 부하입니다됩니다, 기본값은 처음으로로드됩니다.

사용자는 UI에서 다른 클럽을 클릭하고이 클럽에 대한 새로운 권한 목록을 가져 오는 서비스 방법을 호출합니다.

Object principle = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
SecureMember sm = (SecureMember) principle; 
Authentication auth = 
     new UsernamePasswordAuthenticationToken(sm, null, newAuthories); <br><br> 
    SecurityContextHolder.getContext().setAuthentication(auth);<br> 
request.getSession(false).invalidate(); 

SecureMember은 스프링 프레임 워크에서 사용자를 확장 :

나는 다음 수행합니다.

문제는 SecureMember 권한이 새 권한으로 업데이트되지 않는다는 것입니다.

감사 게리

+0

왜 세션을 무효화합니까? 그렇게 할 때 사용자가 로그 아웃하지 않습니까? – sourcedelica

+0

죄송합니다. request.getSession (false) .invalidate(); 위의 snipped 전에 호출됩니다. 거기 있으면 안된다. – user1331982

답변

0

스프링 시큐리티는 HttpSession가 null로, 요청시 무효가 된 경우 보안 컨텍스트를 저장, 그렇게하지 않을 경우 세션을 무효화 한 후 컨텍스트를 설정 (새로운를 작성하지 않는 경우 세션), 그것은 저장되지 않습니다.

이 경우에는 this log message이 표시되어야하며 디버그 로깅을 사용하도록 설정되어 있어야합니다.

새 세션을 만들거나 원래 세션을 무효화하지 마십시오.