Первый запрос к веб-службе Restful, интегрированной с CAS, не выполнен - PullRequest
0 голосов
/ 31 октября 2019

Мое приложение под названием App, которое интегрировано с CAS, предоставляет только http-службу restful, при успешном входе на сервер cas я отправляю первый запрос (сообщение: http://localhost:8080/manager/service/registry/form-save) в приложение для публикации данных, этот запросне удалось, а затем запрос снова, это работает. Я не знаю, почему первый запрос не удался?

Ответ: URL-адрес запроса: http://localhost:8080/manager/service/registry/form-save Метод запроса: GET Код состояния: 405 Метод не разрешен

Фильтр cas выглядит следующим образом:

public final void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse,
        final FilterChain filterChain) throws IOException, ServletException {
    final HttpServletRequest request = (HttpServletRequest) servletRequest;
    final HttpServletResponse response = (HttpServletResponse) servletResponse;
    final HttpSession session = request.getSession(false);
    final Assertion assertion = session != null ? (Assertion) session.getAttribute(CONST_CAS_ASSERTION) : null;

    if (isExclusion(request)) {
        filterChain.doFilter(request, response);
        return;
    }

    if (assertion != null) {
        session.setAttribute("CAS_ASSERTION", assertion);
        filterChain.doFilter(request, response);
        return;
    }

    final String serviceUrl = constructServiceUrl(request, response);
    final String ticket = CommonUtils.safeGetParameter(request, getArtifactParameterName());
    final boolean wasGatewayed = this.gatewayStorage.hasGatewayedAlready(request, serviceUrl);

    if (CommonUtils.isNotBlank(ticket) || wasGatewayed) {
        filterChain.doFilter(request, response);
        return;
    }

    final String modifiedServiceUrl;

    log.debug("no ticket and no assertion found");
    if (this.gateway) {
        log.debug("setting gateway attribute in session");
        modifiedServiceUrl = this.gatewayStorage.storeGatewayInformation(request, serviceUrl);
    } else {

        if (!"".equals(serverIndex) && null != serverIndex) {
            modifiedServiceUrl = serverIndex;
        } else {
            modifiedServiceUrl = serviceUrl;
        }
    }

    if (log.isDebugEnabled()) {
        log.debug("Constructed service url: " + modifiedServiceUrl);
    }

    final String urlToRedirectTo = CommonUtils.constructRedirectUrl(this.casServerLoginUrl,
            getServiceParameterName(), modifiedServiceUrl, this.renew, this.gateway);

    if (log.isDebugEnabled()) {
        log.debug("redirecting to \"" + urlToRedirectTo + "\"");
    }

    if (!StringUtils.isEmpty(request.getParameter("ajax"))) {
        PrintWriter out = response.getWriter();
        Map<String, Object> returnData = new HashMap<String, Object>();
        Map<String, Object> returnMapData = new HashMap<String, Object>();
        returnMapData.put("ssoVerifyAddress", urlToRedirectTo);
        returnData.put("success", 1);
        returnData.put("data", returnMapData);
        out.println(JSONObject.fromObject(returnData).toString());
        out.flush();
        out.close();
    } else {
        response.sendRedirect(urlToRedirectTo);
    }
}


<filter>
  <filter-name>CAS Single Sign Out Filter</filter-name>
  <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CAS Single Sign Out Filter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
  <filter-name>CAS Authentication Filter</filter-name>
  <filter-class>com.security.cas.filter.AuthenticationFilter</filter-class>
  <init-param>
     <param-name>casServerLoginUrl</param-name>
     <param-value>http://localhost:8080/cas</param-value>
  </init-param>
  <init-param>
     <param-name>serverName</param-name>
     <param-value>http://localhost:8080</param-value>
  </init-param>
</filter>

<filter-mapping>
  <filter-name>CAS Authentication Filter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
  <filter-name>CAS Validation Filter</filter-name>
  <filter-class>
     org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
  <init-param>
     <param-name>casServerUrlPrefix</param-name>
     <param-value>http://localhost:8080/cas</param-value>
  </init-param>
  <init-param>
     <param-name>serverName</param-name>
     <param-value>http://localhost:8080</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CAS Validation Filter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
  <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
  <filter-class>
     org.jasig.cas.client.util.HttpServletRequestWrapperFilter
  </filter-class>
</filter>
<filter-mapping>
  <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
  <filter-name>CAS Assertion Thread Local Filter</filter-name>
  <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CAS Assertion Thread Local Filter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Есть ли способ интеграции CAS для службы Restful API?

...