Я сделал похожую вещь, но отличается от того, что здесь предлагали. Я не говорю, что это «правильный» способ сделать это - но он работал очень хорошо для меня. В объекте Principal есть пользователь, а также объект Details в AuthenticationToken, в котором можно хранить карту (String, String) другой информации для входа в систему.
public class RequestFormDeatils extends SpringSecurityFilter {
protected void doFilterHttp(HttpServletRequest request, ...) {
SecurityContext sec = SecurityContextHolder.getContent();
AbstractAuthenticationToken auth = (AbstractAuthenticationToken)sec.getAuthentication();
Map<String, String> m = new HashMap<String, String>;
m.put("myCustom1", request.getParamtere("myCustom1"));
m.put("myCustom2", request.getParameter("myCustom2"));
auth.setDetails(m);
}
Теперь в любом месте вашего кода вы используете SecurityContext для распространения этой информации, связанной с безопасностью, без необходимости связывать ее с вашим объектом UserDetails или передавать в качестве аргументов. Я делаю этот код в SecurityFilter в конце цепочки Spring Security Filter.
<bean id="requestFormFilter" class="...RequestFormDetails">
<custom-filter position="LAST" />
</bean>