2014-03-04 2 views
1

의 null 내가 가지고 나는 다음과 같은 코드를 사용하여 서버에 대해 인증하기 위해 노력하고있어봄 보안 - sessionId가 인증

@Override 
public void onAuthenticationSuccess(HttpServletRequest request 
     , HttpServletResponse response, Authentication authentication) 
      throws IOException, ServletException { 

     String sessionId = ((WebAuthenticationDetails) authentication 
      .getDetails()).getSessionId(); 

} 

다음과 같은 기능 :

HttpClient client = new HttpClient(); 
CommonsClientHttpRequestFactory commons 
     = new CommonsClientHttpRequestFactory(client); 

RestTemplate template = new RestTemplate(commons); 
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>() 
map.add("j_username", "11"); 
map.add("j_password", "22");   
Object result2 = template.postForObject(
     "http://localhost:8080/APP/j_spring_security_check", map,Object.class); 

것입니다, 자격 증명은 합법적 인 나는 onSuccess를 입력하지만 위의 코드를 사용할 때마다 sessionId가 null입니다.

내가 양식을 통해 인증 할 때 세션 ID가 생성됩니다. 내가 설정할 때

<security:http create-session="always" /> 

실제로 작동합니다. 그러나 나는 이것이 매회마다 세션을 열고 정말로 비효율적이라고 생각합니다.

왜 세션 ID가 java post 요청에서 null이고 양식이 아닌지 어떤 생각입니까? 어떻게 수정해야합니까?

감사합니다.

답변

1

나머지 애플리케이션과 스프링 보안 구성을 보지 않고는 말하기 어렵습니다. <debug> 요소를 사용하여 스프링 보안 디버깅을 쉽게 활성화 할 수 있습니다.이 요소는 로그인 양식의 경우 세션이 생성되는 위치의 스택 추적을 제공합니다. 응용 프로그램이 JSP를 사용하고 있고 로그인 양식을 볼 때 JSP가 세션을 작성하고 있기 때문에 이것이 아마도 추측됩니다. RestTemplate을 사용하여 게시하는 경우 사용자 이름과 암호를 제출하기 전까지 세션을 만들지 않습니다 (onSuccess 세션은 자격 증명을 제출하기 전에 세션입니다).

+0

분명히 필터 체인이 보이지 않고 'create-session = "always"'을 사용하지 않으면 세션이 생성되지 않습니다. – Urbanleg