Как получить доступ к вошедшему в систему принципалу из Spring bean с областью сеанса

Я хочу получить доступ к вошедшему в систему пользователю из Spring bean с областью сеанса, возможно ли это?

Я не использую Spring Security, а вместо этого использую openam для обеспечения безопасности своего веб-приложения, поэтому я не могу использовать это (как я видел во многих примерах в Интернете):

(User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();

Можно ли внедрить в мой bean-компонент с областью сеанса то же имя, что и вы:

HttpServletRequest.getUserPrincipal().getName()

person Henrique Ordine    schedule 19.02.2015    source источник


Ответы (2)


Вы можете попробовать создать перехватчик и установить для вошедшего в систему пользователя свойство вашего сеансового компонента, которое можно внедрить в ваш перехватчик.

Как это:

public class SessionDataInitializerInterceptor extends HandlerInterceptorAdapter {

    private static final Logger LOG = Logger.getLogger(SessionDataInitializerInterceptor.class);

    @Autowired
    SessionData sessionData;

    public SessionDataInitializerInterceptor() {
    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Principal principal = request.getUserPrincipal();
        if (principal != null) {
            if (sessionData.getUser() == null) {
                sessionData.setUser(principal.getName());
            }
        } else {
            LOG.error(String.format("No user principal in request for url[%s]", request.getRequestURL().toString()));
        }
        return true;
    }

}

Не забудьте сопоставить свой перехватчик с соответствующими URL-адресами.

person Pearl Jade    schedule 02.04.2015

Также это работает:

@Component
@SessionScope
public class SessionData {

    @Autowired
    private HttpServletRequest request;

    @PostConstruct
    public void init() {
        Principal principal = request.getUserPrincipal();        
    }
}
person xonya    schedule 13.07.2019