Java tutorial
/** * * ?? * InitFilter * * ? * ????? * * * Copyright (c) 2015 OpenID Foundation Japan. * This is released under the MIT License, see LICENSE file. */ package jp.or.openid.eiwg.filter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jp.or.openid.eiwg.constants.MessageConstants; import org.apache.commons.lang.StringUtils; import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; /** * Filter implementation class InitFilter */ @WebFilter(urlPatterns = "*") public class InitFilter implements Filter { /** * ?? * * @param conf * @throws ServletException */ public void init(FilterConfig conf) throws ServletException { } /** * ? */ public void destroy() { } /** * ???? * * @param request * @param response ? * @param chain ? * @throws ServletException * @throws IOException */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { try { // ?? String path = ((HttpServletRequest) request).getServletPath(); if (path == null || StringUtils.isEmpty(path)) { // this.errorResponse((HttpServletResponse) response, HttpServletResponse.SC_NOT_FOUND, null, MessageConstants.ERROR_NOT_FOUND); } else { // ????????? if (!"/scim/ServiceProviderConfigs".equalsIgnoreCase(path) && !"/scim/ResourceTypes".equalsIgnoreCase(path) && !"/scim/Schemas".equalsIgnoreCase(path) && !"/scim/Users".equalsIgnoreCase(path)) { // this.errorResponse((HttpServletResponse) response, HttpServletResponse.SC_NOT_FOUND, null, MessageConstants.ERROR_NOT_FOUND); } else { // ?? chain.doFilter(request, response); } } } catch (Throwable e) { // e.printStackTrace(); this.errorResponse((HttpServletResponse) response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, null, MessageConstants.ERROR_UNKNOWN); } } /** * ? * * @param code HTTP * @param type * @param message */ private void errorResponse(HttpServletResponse response, int code, String type, String message) throws IOException { try { // ?? ObjectMapper mapper = new ObjectMapper(); ObjectNode rootNode = mapper.createObjectNode(); ArrayNode schemasArray = rootNode.putArray("schemas"); schemasArray.add("urn:ietf:params:scim:api:messages:2.0:Error"); if (type != null && !type.isEmpty()) { rootNode.put("scimType", type); } rootNode.put("detail", message); rootNode.put("status", code); response.setStatus(code); response.setContentType("application/scim+json;charset=UTF-8"); PrintWriter out = response.getWriter(); mapper.writeValue(out, rootNode); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } } }