Мой вопрос вкратце: после перезапуска сервера (мой собственный локальный Tomcat) основной объект Spring Security заполняется каждым полем (имя пользователя, пароль, адрес электронной почты, userType и т. Д.) , за исключением пользователяПоле идентификатора.
У меня есть следующий объект User, который реализует объект Spring UserDetails, а также расширяет мой собственный базовый класс объектов:
public class User extends BaseDomainObject implements UserDetails {
private String username;
private String emailAddress;
private String password;
// ... etc ... /
}
(FYI, класс User имеет конструктор, который принимает всеполя, кроме идентификатора (который незаметно вводится hibernate). У этого объекта нет сеттеров. Не уверен, что это важно.)
Поле идентификатора пользователя находится в BaseDomainObject:
class BaseDomainObject {
protected Long id;
public Long getId() {
return id;
}
}
После успешного входа в систему принципал заполняется указанными выше данными пользователя (включая идентификатор), и все устраивает.Это подтверждается следующим выводом журнала (который включает в себя представление toString класса User выше в форме User [id, username, emailAddress]):
2011-07-26 11:50:25,188 DEBUG [org.springframework.security.web.context.HttpSessionSecurityContextRepository] - Obtained a valid SecurityContext from SPRING_SECURITY_CONTEXT: 'org.springframework.security.core.context.SecurityContextImpl@5e8fac5a: Authentication: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@5e8fac5a: Principal: User[1,test,test@test.com]; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@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: 'org.springframework.security.core.context.SecurityContextImpl@729a68c9: Authentication: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@729a68c9: Principal: User[null,test,test@test.com]; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@255f8: RemoteIpAddress: 0:0:0:0:0:0:0:1%0; SessionId: 450FFF87C04098ECC58C2E0829D21D69; Granted Authorities: ROLE_USER, ROLE_CUSTOMER'
Я должен повторить, что в классе User есть другие поля (не в базовом классе), которые также успешно заполнены.В основном все, кроме ID.
Вызывает ли Spring Security конструктор User при настройке полей?По общему признанию, я никогда не задумывался о том, «как» Spring заполняет остальные поля - возможно, это моя проблема?Я действительно не хотел выставлять поле идентификатора с помощью сеттера / в конструкторе.На самом деле, добавление ID в конструктор ничего не делает.
Спасибо за любую помощь.