package com.monkeyk.os.web; import org.apache.commons.lang.StringUtils; import org.apache.oltu.oauth2.common.OAuth; import org.apache.oltu.oauth2.common.message.OAuthResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Map; /** * @author Shengzhao Li */ public abstract class WebUtils { private WebUtils() { } public static void writeOAuthJsonResponse(HttpServletResponse response, OAuthResponse oAuthResponse) { final int responseStatus = oAuthResponse.getResponseStatus(); try { final Map<String, String> headers = oAuthResponse.getHeaders(); for (String key : headers.keySet()) { response.addHeader(key, headers.get(key)); } // CORS setting response.setHeader("Access-Control-Allow-Origin", "*"); response.setContentType(OAuth.ContentType.JSON); //json response.setStatus(responseStatus); final PrintWriter out = response.getWriter(); out.print(oAuthResponse.getBody()); out.flush(); } catch (IOException e) { throw new IllegalStateException("Write OAuthResponse error", e); } } public static void writeOAuthQueryResponse(HttpServletResponse response, OAuthResponse oAuthResponse) { final String locationUri = oAuthResponse.getLocationUri(); try { final Map<String, String> headers = oAuthResponse.getHeaders(); for (String key : headers.keySet()) { response.addHeader(key, headers.get(key)); } response.setStatus(oAuthResponse.getResponseStatus()); response.sendRedirect(locationUri); } catch (IOException e) { throw new IllegalStateException("Write OAuthResponse error", e); } } /** * Retrieve client ip address * * @param request HttpServletRequest * @return IP */ public static String retrieveClientIp(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (isUnAvailableIp(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (isUnAvailableIp(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (isUnAvailableIp(ip)) { ip = request.getRemoteAddr(); } return ip; } private static boolean isUnAvailableIp(String ip) { return (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)); } }