当前位置: 首页 > news >正文

游戏网站开发具备中国英文政务网站建设

游戏网站开发具备,中国英文政务网站建设,网站建设方面,新网站多久收录内页一、案例演示 说明#xff1a;如下案例通过springboot的方式演示拦截器是如何使用的#xff0c;以获取Controller中的请求参数为切入点进行演示 1.1、前置准备工作 1.1.1、pom dependencies!-- spring-boot --dependencygroupIdorg.spring…一、案例演示 说明如下案例通过springboot的方式演示拦截器是如何使用的以获取Controller中的请求参数为切入点进行演示 1.1、前置准备工作 1.1.1、pom dependencies!-- spring-boot --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!-- 工具 --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.76/version/dependencydependencygroupIdcommons-beanutils/groupIdartifactIdcommons-beanutils/artifactIdversion1.9.3/version/dependencydependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpclient/artifactIdversion4.5.6/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.4/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-collections4/artifactIdversion4.3/version/dependency!-- servlet --dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependency/dependencies 1.1.2、WebRequestConstant /*** Author : 一叶浮萍归大海* Date: 2023/11/5 11:39* Description:*/ public class WebRequestConstant {/*** 请求方法POST*/public static final String METHOD_TYPE_POST POST;/*** 数据类型application/json*/public static final String CONTENT_TYPE_APPLICATION_JSON application/json;/*** 字符解码*/public static final String CHARACTER_U %u;} 1.1.3、EncodeUtil  /*** Author : 一叶浮萍归大海* Date: 2023/11/5 11:12* Description:*/ public class EncodeUtil {private static final String DEFAULT_URL_ENCODING UTF-8;private static final char[] BASE62 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.toCharArray();/*** Hex编码.*/public static String encodeHex(byte[] input) {return Hex.encodeHexString(input);}/*** Hex解码.*/public static byte[] decodeHex(String input) {try {return Hex.decodeHex(input.toCharArray());} catch (DecoderException e) {return null;}}/*** Base64编码.*/public static String encodeBase64(byte[] input) {return Base64.encodeBase64String(input);}/*** Base64编码, URL安全(将Base64中的URL非法字符和/转为-和_, 见RFC3548).*/public static String encodeUrlSafeBase64(byte[] input) {return Base64.encodeBase64URLSafeString(input);}/*** Base64解码.*/public static byte[] decodeBase64(String input) {return Base64.decodeBase64(input);}/*** Base62编码。*/public static String encodeBase62(byte[] input) {char[] chars new char[input.length];for (int i 0; i input.length; i) {chars[i] BASE62[(input[i] 0xFF) % BASE62.length];}return new String(chars);}/*** Html 转码.*/public static String escapeHtml(String html) {return StringEscapeUtils.escapeHtml4(html);}/*** Html 解码.*/public static String unescapeHtml(String htmlEscaped) {return StringEscapeUtils.unescapeHtml4(htmlEscaped);}/*** Xml 转码.*/public static String escapeXml(String xml) {return StringEscapeUtils.escapeXml(xml);}/*** Xml 解码.*/public static String unescapeXml(String xmlEscaped) {return StringEscapeUtils.unescapeXml(xmlEscaped);}/*** URL 编码, Encode默认为UTF-8.*/public static String urlEncode(String part) {try {return URLEncoder.encode(part, DEFAULT_URL_ENCODING);} catch (UnsupportedEncodingException e) {e.printStackTrace();return null;}}/*** URL 解码, Encode默认为UTF-8.*/public static String urlDecode(String part) {try {return URLDecoder.decode(part, DEFAULT_URL_ENCODING);} catch (UnsupportedEncodingException e) {e.printStackTrace();return null;}} } 1.1.4、StreamUtil /*** Author : 一叶浮萍归大海* Date: 2023/11/5 1:15* Description:*/ public class StreamUtil {public static String getRequestBody(InputStream inputStream) {String line ;StringBuilder body new StringBuilder();int counter 0;// 读取POST提交的数据内容BufferedReader reader new BufferedReader(new InputStreamReader(inputStream));try {while ((line reader.readLine()) ! null) {if (counter 0) {body.append(rn);}body.append(line);counter;}} catch (IOException e) {e.printStackTrace();}return body.toString();}public static HashMapString, String[] parseQueryString(String source) {String[] valueArray null;if (source null) {throw new IllegalArgumentException();}HashMapString, String[] hashMap new HashMapString, String[](16);StringTokenizer st new StringTokenizer(source, );while (st.hasMoreTokens()) {String pair (String) st.nextToken();int pos pair.indexOf();if (pos -1) {continue;}String key pair.substring(0, pos);String val pair.substring(pos 1, pair.length());if (hashMap.containsKey(key)) {String[] oldValues (String[]) hashMap.get(key);valueArray new String[oldValues.length 1];for (int i 0; i oldValues.length; i) {valueArray[i] oldValues[i];}valueArray[oldValues.length] decodeValue(val);} else {valueArray new String[1];valueArray[0] decodeValue(val);}hashMap.put(key, valueArray);}return hashMap;}/*** 自定义解码函数** param value* return*/private static String decodeValue(String value) {if (value.contains(WebRequestConstant.CHARACTER_U)) {return EncodeUtil.urlDecode(value);} else {try {return URLDecoder.decode(value, UTF-8);} catch (UnsupportedEncodingException e) {// 非UTF-8编码return ;}}}public static ServletInputStream getServletInputStream(ByteArrayInputStream bais) {return new ServletInputStream() {Overridepublic int read() throws IOException {return bais.read();}Overridepublic boolean isFinished() {return false;}Overridepublic boolean isReady() {return false;}Overridepublic void setReadListener(ReadListener arg0) {}};}public static byte[] readBytes(InputStream in) throws IOException {BufferedInputStream bufin new BufferedInputStream(in);int buffSize 1024;ByteArrayOutputStream out new ByteArrayOutputStream(buffSize);byte[] temp new byte[buffSize];int size 0;while ((size bufin.read(temp)) ! -1) {out.write(temp, 0, size);}bufin.close();byte[] content out.toByteArray();return content;}} 1.1.5、MyHttpServletRequestWrapper /*** Author : 一叶浮萍归大海* Date: 2023/11/4 20:50* Description:*/ Getter Setter public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {/*** 用于保存读取到的body中的数据*/private byte[] body;private MapString, String[] paramsMap;Overridepublic Map getParameterMap() {return paramsMap;}Overridepublic String getParameter(String name) {String[] values paramsMap.get(name);if (values null || values.length 0) {return null;}return values[0];}Overridepublic String[] getParameterValues(String name) {return paramsMap.get(name);}Overridepublic Enumeration getParameterNames() {return Collections.enumeration(paramsMap.keySet());}private HashMapString, String[] getParamMapFromPost(HttpServletRequest request) {String body ;try {body StreamUtil.getRequestBody(request.getInputStream());} catch (IOException e) {e.printStackTrace();}HashMapString, String[] result new HashMapString, String[](16);if (null body || 0 body.length()) {return result;}return StreamUtil.parseQueryString(body);}private MapString, String[] getParamMapFromGet(HttpServletRequest request) {return StreamUtil.parseQueryString(request.getQueryString());}public String getBody(){return new String(body);}public MyHttpServletRequestWrapper(HttpServletRequest request) throws Exception {super(request);body StreamUtil.readBytes(request.getInputStream());}Overridepublic BufferedReader getReader() throws IOException {return new BufferedReader(new InputStreamReader(getInputStream()));}Overridepublic ServletInputStream getInputStream() throws IOException {final ByteArrayInputStream bais new ByteArrayInputStream(body);return StreamUtil.getServletInputStream(bais);}} 1.1.6、UserDTO Data AllArgsConstructor NoArgsConstructor Accessors(chain true) public class UserDTO implements Serializable {/*** 用户名*/private String username;/*** 密码*/private String password;} 二、创建过滤器 2.1、MyFilter /*** Author : 一叶浮萍归大海* Date: 2023/11/4 20:37* Description:*/ Slf4j Component WebFilter(urlPatterns /*, filterName channelFilter) public class MyFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info( MyFilter init );}/*** 普通的参数可以通过request.getParameterMap中获取而Controller层被RequestBody修饰的参数需要从request的InputStream中获取* 但是由于InputStream只能读取一次如果过滤器读取了参数那么后面的拦截器和Controller层就读取不到参数了所以这类参数需要单独获取可以把* request封装一下copy一份request一个用于在拦截器过滤器中读取参数一个放行给Controller使用* * param request* param response* param chain* throws ServletException* throws IOException*/Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {ServletRequest requestWrapper null;String param ;if (request instanceof HttpServletRequest) {HttpServletRequest httpServletRequest (HttpServletRequest) request;String method httpServletRequest.getMethod().toUpperCase();String type httpServletRequest.getContentType();if (WebRequestConstant.METHOD_TYPE_POST.equals(method) WebRequestConstant.CONTENT_TYPE_APPLICATION_JSON.equalsIgnoreCase(type)) {try {requestWrapper new MyHttpServletRequestWrapper((HttpServletRequest) request);} catch (Exception e) {throw new RuntimeException(e);}}}if (requestWrapper null) {MapString, String[] originRequestMap request.getParameterMap();MapString, String requestMap new HashMapString, String(16);for (String key : originRequestMap.keySet()) {String[] values originRequestMap.get(key);requestMap.put(key, values[0]);}param JSON.toJSONString(requestMap);} else {param ((MyHttpServletRequestWrapper) requestWrapper).getBody();}log.info(过滤器param:{}, param);//放行if (requestWrapper null) {chain.doFilter(request, response);} else {chain.doFilter(requestWrapper, response);}}Overridepublic void destroy() {log.info( MyFilter destroy );}} 三、拦截器 3.1、创建拦截器 /*** Author : 一叶浮萍归大海* Date: 2023/11/4 18:29* Description: 自定义的登录拦截器*/ Slf4j Component public class MyLoginHandlerInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse response, Object handler) throws Exception {log.info( MyLoginHandlerInterceptor preHandle );try {String requestUrl httpServletRequest.getRequestURI();ServletRequest requestWrapper null;String param ;String method httpServletRequest.getMethod().toUpperCase();String type httpServletRequest.getContentType();if (WebRequestConstant.METHOD_TYPE_POST.equals(method) WebRequestConstant.CONTENT_TYPE_APPLICATION_JSON.equalsIgnoreCase(type)) {requestWrapper new MyHttpServletRequestWrapper(httpServletRequest);}if (requestWrapper null) {MapString, String[] originRequestMap httpServletRequest.getParameterMap();MapString, String requestMap new HashMapString, String(16);for (String key : originRequestMap.keySet()) {String[] values originRequestMap.get(key);requestMap.put(key, values[0]);}param JSON.toJSONString(requestMap);} else {param ((MyHttpServletRequestWrapper) requestWrapper).getBody();}log.info(拦截器param:{}, param);} catch (Exception e) {e.printStackTrace();}return true;}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {log.info( MyLoginHandlerInterceptor postHandle );}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {log.info( MyLoginHandlerInterceptor afterCompletion );} } 3.2、注册拦截器 /*** Author : 一叶浮萍归大海* Date: 2023/11/4 18:37* Description:*/ Configuration public class MyWebMvcConfigurer implements WebMvcConfigurer {/*** 引入自定义的拦截器对象*/Resourceprivate MyLoginHandlerInterceptor loginHandlerInterceptor;/*** 注册拦截器* param registry* addPathPatterns(/**)拦截所有* excludePathPatterns(/business/*)放行以/business打头的请求*/Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginHandlerInterceptor).addPathPatterns(/**).excludePathPatterns(/business/*).order(1);// registry.addInterceptor(loginHandlerInterceptor).addPathPatterns(/**);} } 四、使用拦截器案例 4.1、获取Controller层RequestBody中的对象参数 4.1.1、LoginController#login() PostMapping(/login) public String login(RequestBody UserDTO param) {log.info(LoginController login param:{}, param);return OK; } 4.1.2、测试 4.2、获取Controller层普通的对象参数 4.2.1、LoginController#login2() PostMapping(/login2) public String login2(UserDTO param) {log.info(LoginController login2 param:{}, param);return OK; } 4.2.2、测试#form-data 4.2.3、测试#x-www-form-urlencoded 4.3、获取Controller层字符串参数 4.3.1、LoginController#login3() GetMapping(/login3) public String login3(String username,String password) {log.info(LoginController login3 param username:{},password:{}, username,password);return OK; } 4.3.2、测试 五、参考 https://blog.csdn.net/w_t_y_y/article/details/103407841https://blog.csdn.net/weixin_45100881/article/details/128660421
http://wiki.neutronadmin.com/news/279906/

相关文章:

  • 营销型网站建设就找山东艾乎建站WordPress网站修改
  • 做网站需要服务器和什么网站建设的意义以及重要性
  • 自己做的网站点进去很卡网页搜索框的记录怎么删除
  • 怎么用7牛云做网站在哪里找个人做网站的
  • 浩博建设集团网站网站建设公众号小程序属于什么
  • 哪个网站微博做的最好网站做seo安全吗
  • 广州设计网站培训班智能建站系统下载
  • 多个网站做计划全网seo优化电话
  • 在対网站做可能的来自内部和外部的攻击透明网站模板
  • 福州 网站建设企业网站效果图
  • 个人网站是啥网站做推广页需要什么软件
  • 学做投资网站深圳外贸建站
  • 自己做视频网站做网站文字编辑工作好不好
  • 网站维护流程图上海杨浦网站建设
  • 网站开发设置用户发送wordpress
  • 网站运营思路网站建设和风险评估
  • 智能制造公司厦门seo优化
  • 婚纱摄影网站html模板网站建设与优化
  • 个人可以做导航网站吗谷歌推广培训
  • 重庆市企业网站建设免费播放电视剧的app有哪些
  • 个人备案后做淘客网站网站源码搭建教程
  • 网站没备案能访问吗成立一家公司的基本流程
  • seo网站排名优化公司wordpress循环所有文章
  • 网站建设设计技术方案模板下载温州网站制作优化
  • 私募基金公司网站建设网站建设的相应技术
  • 洛阳建设网站的公司网站图片是用什么软件做的
  • 国外有没有网站是做潘多拉的中牟网络推广外包
  • 网站搭建视频怎样查看网站服务商
  • 做外贸找生意上哪个网站有经验的郑州网站建设
  • 建设网站熊掌号快速网站优化服务