7

サービスの開発に取り組んでいます。

要点は、私の index.xhtml がパラメーター (POST と GET のいずれか) と Cookie を HTTP 要求から取得する必要があるということです。

私はこのように組み合わせてみ<f:metadata>まし<f:event type="preRenderView">た:

<f:metadata>  
    <f:event type="preRenderView" listener="#{deConversation.start}"/>  
</f:metadata>

deConversation.start のコード:

public void start(ComponentSystemEvent event) {
    System.out.println("checkLogin");
    HttpServletRequest request = SsoHelper.getRequest();
    String requestSessId = SsoHelper.getRequestSessionId(request);
    String requestRedirect = SsoHelper.getRequestRedirect(request);

    System.out.println("sessId " + requestSessId);

    if (requestRedirect == null || requestRedirect.isEmpty()) {
        requestRedirect = "self";
    }

    if (requestSessId != null) {
        trySessId(requestSessId, requestRedirect);
    }

    externalResourcesHandler.setExternalRedirect(requestRedirect);
    tryToBeginConversation();

    if (!isAuthorized()) {
        SsoHelper.performNavigation("auth");
    }
}

SsoHelper は、次のような API を提供するだけです。

public static String getRequestSessionId(HttpServletRequest request) {
    Map<String, Object> cookieMap = FacesContext.getCurrentInstance().getExternalContext().getRequestCookieMap();
    String requestDeSessionId = null;
    if (cookieMap.containsKey("de_session_id")) {
        requestDeSessionId = ((Cookie) cookieMap.get("de_session_id")).getValue();
    }
    return requestDeSessionId;
}

public static String getRequestRedirect(HttpServletRequest request) {
    return getRequestParam(request, "redirect", "self");
}

public static String getRequestExternalCss(HttpServletRequest request) {
    return getRequestParam(request, "externalcss", null);
}

public static String getRequestParam(HttpServletRequest request, String name, String defaultValue) {
    String[] paramValues = HttpServletRequestHelper.getParamValues(request, name);
    String paramValue = null;
    if (paramValues != null && paramValues.length != 0) {
        paramValue = paramValues[0];
    }
    if(paramValue == null){
        paramValue = defaultValue;
    }
    return paramValue;
}

public static HttpServletRequest getRequest() {
    return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
}

public static void performNavigation(String destination) {
    FacesContext context = FacesContext.getCurrentInstance();
    ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
    handler.performNavigation(destination);
}

ポイントは、メソッド start() で POST パラメーターまたは Cookie を取得できなかったことです。GET パラメータしか取得できません。

を使用して Cookie と POST パラメータを読み取る可能性はあります<f:event type="preRenderView">か?

4

2 に答える 2

0

@PostConstruct を使用して init メソッドを呼び出す必要があると思います。これにより、ページがレンダリングされる前に init() が呼び出され、グローバル変数を使用して、変数にセッションまたは Cookie の値を割り当てて、要件を達成できるようになります。

例:

@PostConstruct
public void init(){
    // Your Response
    Map request = (Map)FacesContext.getCurrentInstance().getExternalContext().getResponse();
    request.get("Your Key");

    // Cookies
    Map cookie = FacesContext.getCurrentInstance().getExternalContext().getRequestCookieMap();
    cookie.get("Your Key");

    Map session = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
    session.get("Your Key"); 
}

これを試してみてください。役立つと思います。

于 2013-07-09T06:44:24.520 に答える