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

做网站的网络非要专线吗成都网站排名 生客seo

做网站的网络非要专线吗,成都网站排名 生客seo,东莞凤岗房价,网站硬件防火墙现在越来越多的登录方式都用到了token作为用户登录令牌#xff0c;所以实现了一个token生成和校验案例。缺点#xff1a;该实现方式token是存储在内存中#xff0c;不适合分布式项目#xff0c;如需改为分布式项目部署#xff0c;可把token存储在redis中#xff0c;其中的…现在越来越多的登录方式都用到了token作为用户登录令牌所以实现了一个token生成和校验案例。缺点该实现方式token是存储在内存中不适合分布式项目如需改为分布式项目部署可把token存储在redis中其中的实现原理还是保持不变。一)token编码工具类package com.oysept.token.utils;/*** token编码工具类* author ouyangjun*/public class TokenEncryptUtils {// 编码密码,可自定义private static final String ENCODED_PASSWORD ouyangjun;/*** 编码* param str* return*/public static String encoded(String str) {return strToHex(encodedString(str, ENCODED_PASSWORD));}/*** 转换* param str* param password* return*/private static String encodedString(String str, String password) {char[] pwd password.toCharArray();int pwdLen pwd.length;char[] strArray str.toCharArray();for (int i0; istrArray[i] (char)(strArray[i] ^ pwd[i%pwdLen] ^ pwdLen);}return new String(strArray);}private static String strToHex(String s) {return bytesToHexStr(s.getBytes());}private static String bytesToHexStr(byte[] bytesArray) {StringBuilder builder new StringBuilder();String hexStr;for (byte bt : bytesArray) {hexStr Integer.toHexString(bt 0xFF);if (hexStr.length() 1) {builder.append(0);builder.append(hexStr);}else{builder.append(hexStr);}}return builder.toString();}/*** 解码* param str* return*/public static String decoded(String str) {String hexStr null;try {hexStr hexStrToStr(str);} catch (Exception e) {e.printStackTrace();}if (hexStr ! null) {hexStr encodedString(hexStr, ENCODED_PASSWORD);}return hexStr;}private static String hexStrToStr(String hexStr) {return new String(hexStrToBytes(hexStr));}private static byte[] hexStrToBytes(String hexStr) {String hex;int val;byte[] btHexStr new byte[hexStr.length()/2];for (int i0; ihex hexStr.substring(2*i, 2*i2);val Integer.valueOf(hex, 16);btHexStr[i] (byte) val;}return btHexStr;}}二)token生成和校验工具类(包含main方法测试)package com.oysept.token.utils;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;/*** token生成和校验* author ouyangjun*/public class TokenUtils {private static Map MAP_TOKENS new HashMap();private static final int VALID_TIME 60*60*2; // token有效期(秒)public static final String TOKEN_ERROR F; // 非法public static final String TOKEN_OVERDUE G; // 过期public static final String TOKEN_FAILURE S; // 失效/*** 生成token,该token长度不一致,如需一致,可自行MD5或者其它方式加密一下* 该方式的token只存在磁盘上,如果项目是分布式,最好用redis存储* param str: 该字符串可自定义,在校验token时要保持一致* return*/public static String getToken(String str) {String token TokenEncryptUtils.encoded(getCurrentTime(),str);MAP_TOKENS.put(str, token);return token;}/*** 校验token的有效性* param token* return*/public static String checkToken(String token) {if (token null) {return TOKEN_ERROR;}try{String[] tArr TokenEncryptUtils.decoded(token).split(,);if (tArr.length ! 2) {return TOKEN_ERROR;}// token生成时间戳int tokenTime Integer.parseInt(tArr[0]);// 当前时间戳int currentTime getCurrentTime();if (currentTime-tokenTime VALID_TIME) {String tokenStr tArr[1];String mToken MAP_TOKENS.get(tokenStr);if (mToken null) {return TOKEN_OVERDUE;} else if(!mToken.equals(token)) {return TOKEN_FAILURE;}return tokenStr;} else {return TOKEN_OVERDUE;}}catch (Exception e) {e.printStackTrace();}return TOKEN_ERROR;}/**获取当前时间戳(10位整数)*/public static int getCurrentTime() {return (int)(System.currentTimeMillis()/1000);}/*** 移除过期的token*/public static void removeInvalidToken() {int currentTime getCurrentTime();for (Entry entry : MAP_TOKENS.entrySet()) {String[] tArr TokenEncryptUtils.decoded(entry.getValue()).split(,);int tokenTime Integer.parseInt(tArr[0]);if(currentTime-tokenTime VALID_TIME){MAP_TOKENS.remove(entry.getKey());}}}/*** 测试* param args*/public static void main(String[] args) {String str username_and_password;// 获取tokenString token TokenUtils.getToken(str);System.out.println(token Result: token);// 校验tokenString checkToken TokenUtils.checkToken(token);System.out.println(checkToken Result: checkToken);if(str.equals(checkToken)) {System.out.println(token verification succeeded!);}}}补充知识JAVA后端生成Token(令牌)用于校验客户端防止重复提交1.概述在web项目中服务端和前端经常需要交互数据有的时候由于网络相应慢客户端在提交某些敏感数据(比如按照正常的业务逻辑此份数据只能保存一份)时如果前端多次点击提交按钮会导致提交多份数据这种情况我们是要防止发生的。2.解决方法①前端处理在提交之后通过js立即将按钮隐藏或者置为不可用。②后端处理对于每次提交到后台的数据必须校验也就是通过前端携带的令牌(一串唯一字符串)与后端校验来判断当前数据是否有效。3.总结第一种方法相对来说比较简单但是安全系数不高第二种方法从根本上解决了问题所以我推荐第二种方法。4.核心代码生成Token的工具类/*** 生成Token的工具类*/package red.hearing.eval.modules.token;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Random;import sun.misc.BASE64Encoder;/*** 生成Token的工具类* author zhous* since 2018-2-23 13:59:27**/public class TokenProccessor {private TokenProccessor(){};private static final TokenProccessor instance new TokenProccessor();public static TokenProccessor getInstance() {return instance;}/*** 生成Token* return*/public String makeToken() {String token (System.currentTimeMillis() new Random().nextInt(999999999)) ;try {MessageDigest md MessageDigest.getInstance(md5);byte md5[] md.digest(token.getBytes());BASE64Encoder encoder new BASE64Encoder();return encoder.encode(md5);} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}Token通用工具类/****/package red.hearing.eval.modules.token;import javax.servlet.http.HttpServletRequest;import org.apache.commons.lang3.StringUtils;/*** Token的工具类* author zhous* since 2018-2-23 14:01:41**/public class TokenTools {/*** 生成token放入session* param request* param tokenServerkey*/public static void createToken(HttpServletRequest request,String tokenServerkey){String token TokenProccessor.getInstance().makeToken();request.getSession().setAttribute(tokenServerkey, token);}/*** 移除token* param request* param tokenServerkey*/public static void removeToken(HttpServletRequest request,String tokenServerkey){request.getSession().removeAttribute(tokenServerkey);}/*** 判断请求参数中的token是否和session中一致* param request* param tokenClientkey* param tokenServerkey* return*/public static boolean judgeTokenIsEqual(HttpServletRequest request,String tokenClientkey,String tokenServerkey){String token_client request.getParameter(tokenClientkey);if(StringUtils.isEmpty(token_client)){return false;}String token_server (String) request.getSession().getAttribute(tokenServerkey);if(StringUtils.isEmpty(token_server)){return false;}if(!token_server.equals(token_client)){return false;}return true;}}使用方法①在输出前端页面的时候调用TokenTools.createToken方法会把本次生成的token放入session中。②然后在前端页面提交数据时从session中获取token然后添加到要提交的数据中。③服务端接受数据后调用judgeTokenIsEqual方法判断两个token是否一致如果不一致则返回不进行处理。备注tokenClientkey和tokenServerkey自定义调用judgeTokenIsEqual方法时的tokenClientkey一定要与前端页面的key一致。以上这篇java token生成和校验的实例代码就是小编分享给大家的全部内容了希望能给大家一个参考也希望大家多多支持脚本之家。
http://www.pierceye.com/news/514159/

相关文章:

  • 萍乡网站推广陕西省住房和城乡建设厅网站上查询
  • 南京市浦口区建设局网站多商户商城app开发
  • 网站设置不能通过链接访问中专网站建设与管理就业前景
  • 大连网站建设哪个公司好郑州最新通告
  • 如何自己搭建网站做装修的业务网站
  • app网站的优点手机自助建站永久免费
  • 搜索栏搜索网站?热?文市场调研流程
  • 外贸网站建设课本建设网站群的好处
  • 网站开发文献综述范文网络推广计划书格式
  • 有免费网站服务器吗在线美图
  • 电商网站设计的原则免费下载app软件下载大全
  • 餐饮网站建设优化建站wordpress copyright
  • 腾讯建站官网设计网页步骤
  • 网站建设三方合同范本wordpress数字链接出现404
  • 下载用的网站怎么做网站模板怎么使用教程
  • 没有网站 可以做百度口碑吗展馆的科普网站建设
  • 河北网站备案查询系统商城网站seo
  • 网站申请页面网站空间不够用怎么办
  • 网站开发最合适的搭配螺栓球网架
  • 广东网站建设排名凡科建站下载
  • 建设厅网站预算员报名时间网站建设策划书的编制
  • 厦门手机网站建设公司哪家好鲜花网站源码
  • 北京家居网站建设如何制作软件手机软件
  • 北京网站建设策划解决方案长沙建设工程造价网站
  • 北京网站设计公司价格阿里云wordpress插件
  • 网站建设自助建站企业萧山人才网手机版
  • 长沙建站挺找有为太极wordpress 需要zend
  • 通信管理局 网站备案天猫网站设计教程
  • 营销型网站制作成都打造品牌的三点策略
  • 做查工资的网站如何下载网页在线视频