DefaultRequestResolver.java

  1. package cn.home1.oss.lib.webmvc.internal;

  2. import static lombok.AccessLevel.PACKAGE;
  3. import static org.apache.commons.lang3.StringUtils.isNotBlank;
  4. import static org.springframework.http.HttpHeaders.ACCEPT;
  5. import static org.springframework.http.HttpMethod.DELETE;
  6. import static org.springframework.http.HttpMethod.POST;
  7. import static org.springframework.http.HttpMethod.PUT;
  8. import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;

  9. import cn.home1.oss.lib.webmvc.api.RequestResolver;

  10. import lombok.Getter;
  11. import lombok.Setter;
  12. import lombok.extern.slf4j.Slf4j;

  13. import org.springframework.http.HttpMethod;

  14. import javax.servlet.http.HttpServletRequest;

  15. /**
  16.  * Created by zhanghaolun on 16/8/18.
  17.  */
  18. @Getter
  19. @Setter(PACKAGE)
  20. @Slf4j
  21. public class DefaultRequestResolver implements RequestResolver {

  22.   private String loginEndpoint;

  23.   public DefaultRequestResolver(final String loginEndpoint) {
  24.     this.loginEndpoint = loginEndpoint;
  25.   }

  26.   @Override
  27.   public Boolean isLoginRequest(final HttpServletRequest request) {
  28.     final String reqContextPath = request.getContextPath();
  29.     final String contextPath = reqContextPath.endsWith("/") ? reqContextPath : reqContextPath + "/";
  30.     final boolean isLoginRequest = request.getRequestURI().equals(contextPath + this.loginEndpoint);

  31.     if (log.isTraceEnabled()) {
  32.       log.trace("contextPath: {}, requestUri: {}, isLoginRequest: {}", //
  33.         request.getContextPath(), request.getRequestURI(), isLoginRequest);
  34.     }
  35.     return isLoginRequest;
  36.   }

  37.   /**
  38.    * TODO 进一步改进.
  39.    */
  40.   @Override
  41.   public Boolean isAjaxRequest(final HttpServletRequest request) {
  42.     final HttpMethod httpMethod = HttpMethod.valueOf(request.getMethod());
  43.     // final String contentTypeHeader = request.getHeader(CONTENT_TYPE);
  44.     // final String content = isNotBlank(contentTypeHeader) ? contentTypeHeader : "";
  45.     final String acceptHeader = request.getHeader(ACCEPT);
  46.     final String accept = isNotBlank(acceptHeader) ? acceptHeader : "";
  47.     final String underscore = request.getParameter("_");
  48.     final boolean result = POST == httpMethod || PUT == httpMethod || DELETE == httpMethod //
  49.       || accept.contains(APPLICATION_JSON_VALUE) //
  50.       || isNotBlank(underscore);
  51.     return result;
  52.   }
  53. }