0

login.jspによって呼び出されるログインサーブレットの前後にいくつかのロジックを実装する必要があります。

そこで、URL/login用のフィルターを作成しました。一部の操作のユーザープロファイルを取得する必要があるため、次のLoginFilterクラスを作成しました。

public class LoginFilter implements Filter {
    private static Logger logger = Logger.getLogger(LoginFilter.class);

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String username = httpRequest.getParameter("username");
        String password = httpRequest.getParameter("password");

        chain.doFilter(request, response);

        PortalRequestContext context = PortalRequestContext.getCurrentInstance();

        if (context == null)
            logger.info("PortalRequestContext is NULL");
        else {
            String userId = context.getRemoteUser();

            if (userId == null || userId.equals(""))
                logger.info("Login failed, IP:" + httpRequest.getRemoteAddr());
            else
                logger.info("Login executed, username:" + userId);
        }
    }

問題は、「コンテキスト」(PortalRequestContext)が常にnullであるということです。私が間違っているのは何ですか?これは正しいアプローチですか?

4

5 に答える 5

0

会話状態オブジェクトを使用するだけです:

// Gets the current user id
ConversationState conversationState = ConversationState.getCurrent();

org.exoplatform.services.security.Identity identity = conversationState.getIdentity();
String userId = identity.getUserId();
于 2014-03-05T08:52:01.380 に答える
0

詳細はこちらのように GateIN フィルタを追加できます。

そして、この Filter で ConversationState を静的に使用して、現在のユーザー名を取得できます。

ConversationState.getCurrent().getIdentity().getUserId();

于 2013-10-31T13:38:26.333 に答える