0

セッション スコープの Spring Bean からログイン ユーザーにアクセスしたいのですが、それは可能ですか?

私はSpring Securityを使用していませんが、代わりにopenamを使用してWebアプリケーションにセキュリティを提供しているため、これを使用できません(インターネット上の多くの例で見たように):

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

私のセッションスコープのBeanに、あなたが取得したのと同じ名前を注入することは可能ですか:

HttpServletRequest.getUserPrincipal().getName()
4

2 に答える 2

1

インターセプターを作成して、ログインしているユーザーをセッション Bean のプロパティに設定してみてください。これをインターセプターに注入できます。

このような:

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 にマップすることを忘れないでください。

于 2015-04-02T08:35:41.150 に答える