나의 질문은 서버 재시작 (내 자신의 로컬 Tomcat), Spring Security principal 객체가 모든 필드 (사용자 이름, 패스워드, 이메일, userType, 등) 사용자 ID 필드를 제외하고. Tomcat을 재시작 한 후 스프링 보안 사용자가 완전히 채워지지 않는다.
나는이 봄의 된 UserDetails 객체도 내 자신의 기본 오브젝트 클래스를 확장 구현 다음 사용자 개체 :public class User extends BaseDomainObject implements UserDetails {
private String username;
private String emailAddress;
private String password;
// ... etc .../
}
(참고로, 사용자 클래스는 ID를 제외한 모든 필드를 받아들이는 생성자 (인이 저변에서) 최대 절전 모드로 주입 더 세터가이 객체에 없는지가 중요한 경우 확실하지 않음)
사용자 ID 필드의 삶을 BaseDomainObject에 :...
class BaseDomainObject {
protected Long id;
public Long getId() {
return id;
}
}
로그인에 성공하면 주 사용자는 위의 사용자 세부 정보 (ID 포함)로 채워지고 모든 것이 행복합니다. 이것은 (형태 사용자 위에서 User 클래스의를 toString 표현을 포함한다 [ID, 이름, EMAILADDRESS]) 다음 로그 출력에 의해 확인된다 : 서버 재시작 다음 그러나
2011-07-26 11:50:25,188 DEBUG [org.springframework.security.web.context.HttpSessionSecurityContextRepository] - Obtained a valid SecurityContext from SPRING_SECURITY_CONTEXT: '[email protected]8fac5a: Authentication: org.springframew[email protected]5e8fac5a: Principal: User[1,test,[email protected]]; Credentials: [PROTECTED]; Authenticated: true; Details: org.sprin[email protected]255f8: RemoteIpAddress: 0:0:0:0:0:0:0:1%0; SessionId: 450FFF87C04098ECC58C2E0829D21D69; Granted Authorities: ROLE_USER, ROLE_CUSTOMER'
같은 로그 출력 다음과 같습니다
2011-07-26 11:52:28,355 DEBUG [org.springframework.security.web.context.HttpSessionSecurityContextRepository] - Obtained a valid SecurityContext from SPRING_SECURITY_CONTEXT: '[email protected]9a68c9: Authentication: org.springframew[email protected]729a68c9: Principal: User[null,test,[email protected]]; Credentials: [PROTECTED]; Authenticated: true; Details: org.sprin[email protected]255f8: RemoteIpAddress: 0:0:0:0:0:0:0:1%0; SessionId: 450FFF87C04098ECC58C2E0829D21D69; Granted Authorities: ROLE_USER, ROLE_CUSTOMER'
나는 또한 성공적으로 채워집니다 (안 기본 클래스에서) 사용자 클래스의 다른 필드가 있다는 것을 반복한다. 기본적으로 ID를 제외한 모든 것.
필드를 설정할 때 Spring 보안이 User 생성자를 호출합니까? 틀림없이 나는 스프링이 나머지 필드를 다시 채우는 "방법"에 대해 정말로 생각해 본 적이 없다. 아마도 내 문제 일까? 정말 ID 필드를 setter /로 생성자에서 노출하고 싶지 않습니다. 사실, ID를 생성자에 추가하는 것은 아무 것도하지 않습니다.
어떤 도움을 주셔서 감사합니다.
사용자 정의 userDetailService 구현과 보안 컨텍스트 xml에서 호출하는 위치를 붙여 넣을 수 있습니까? –
두 클래스가 모두'Serializable'을 구현하지 않아야합니까? 도메인 객체가 어떻게 채워지는지 알고 싶다면 중단 점을 설정하고 디버거를 연결하는 것이 어떻습니까? –
* 신음 * 당신은 맞다. b - UserDetails는 Serializable을 확장하지만 BaseDomainObject는 확장하지 않는다. Serializable을 추가하면 문제가 해결됩니다. 아래에서 대답하고 싶으면 대답을 수락 할 수 있습니까? –