JavaWeb -- Session实例 -- 自动登录 和 防止表单重复提交(令牌产生器) MD5码

1、 自动登录

http://blog.csdn.net/xj626852095/article/details/16825659


2. 防止表单重复提交

表单Servlet 

//负责产生表单
public class FormServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();String token = TokenProccessor.getInstance().makeToken();request.getSession().setAttribute("token", token);  //在服务器端保存随机数out.println("<form action='/day07/servlet/DoFormServlet' method='post'>");out.write("<input type='hidden' name='token' value='"+token+"'>");out.println("用户名:<input type='text' name='username'>");out.println("<input type='submit' value='提交'>");out.println("</form>");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}class TokenProccessor{/**单态设计模式(保证类的对象在内存中只有一个)*1、把类的构造函数私有*2、自己创建一个类的对象*3、对外提供一个公共的方法,返回类的对象* */private TokenProccessor(){}private static final TokenProccessor instance = new TokenProccessor();public static TokenProccessor getInstance(){return instance;}public String makeToken(){  //checkException//  7346734837483  834u938493493849384  43434384String token = (System.currentTimeMillis() + new Random().nextInt(999999999)) + "";//数据指纹   128位长   16个字节  md5try {MessageDigest md = MessageDigest.getInstance("md5");byte md5[] =  md.digest(token.getBytes());//base64编码--任意二进制编码明文字符   adfsdfsdfsfBASE64Encoder encoder = new BASE64Encoder();return encoder.encode(md5);} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}}}
表单处理Servlet

public class DoFormServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {boolean b = isToken(request);  //判断用户是否是重复提交if(b==true){System.out.println("请不要重复提交");return;}request.getSession().removeAttribute("token");System.out.println("处理用户提交请求!!");}private boolean isToken(HttpServletRequest request) {String client_token = request.getParameter("token");if(client_token==null){return true;}String server_token = (String) request.getSession().getAttribute("token");if(server_token==null){return true;}if(!client_token.equals(server_token)){return true;}return false;}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}



转载于:https://www.cnblogs.com/xj626852095/p/3648071.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑常见故障处理_彩超常见故障及维修

彩超是医学检测手段中重要的环节之一&#xff0c;是对产妇以及对病人进行内部组织和结构观察的重要方式之一&#xff0c;彩超应用得当可以及早的诊断出病人的疾病&#xff0c;为患者解除疾病的困扰。彩超设备是一种极为先进的诊断系统&#xff0c;一般彩超系统包括以下几个部分…

微软历史最高市值是多少?

有人说微软在1999 年 12 月达到股价历史最高点 $58.38并不准确。我1999年12月22日增加微软&#xff0c;公司依照1999年12月27日的价格&#xff08;119.125&#xff0c;拆股后变为59.5625&#xff09;给了我一笔期权&#xff0c;这个价格&#xff0c;成为微软股价空前绝后最高点…

京东2016校招编程题

记得有一个大题&#xff0c;说的是给定一个n*n的矩阵&#xff0c;要求从1开始填充矩阵&#xff0c;最后的矩阵是蛇形的。即如下&#xff1a; n3, 7 8 1 6 9 2 5 4 3 n4, 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 给出代码&#xff1a; #incl…

leetcode21

/*** Definition for singly-linked list.* public class ListNode {* public int val;* public ListNode next;* public ListNode(int x) { val x; }* }*/ public class Solution {public ListNode MergeTwoLists(ListNode l1, ListNode l2) {//递归实现链表合并…

springmvc02

1&#xff0c;创建实体类对象User 注意要导入 bean-validator.jar 包 package com.yangw.springmvc.entity;import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.Range; im…

用基本信号画出如下的信号_股市入门基本知识丨下跌时期可以抄底的安全信号有哪些...

点击蓝色字体 关注我们 带来更多精彩股票市场中的秘籍其实就是“低买高卖”&#xff0c;不过我们不能在大盘一开始下跌的时候就进行买入&#xff0c;因为不清楚下跌的时间&#xff0c;太早介入&#xff0c;只有在反弹幅度超出我们介入的点的时候才可以进行高卖。那么什么时候才…

Flume数据传输事务分析[转]

本文基于ThriftSource,MemoryChannel,HdfsSink三个组件&#xff0c;对Flume数据传输的事务进行分析&#xff0c;如果使用的是其他组件&#xff0c;Flume事务具体的处理方式将会不同。一般情况下&#xff0c;用MemoryChannel就好了&#xff0c;我们公司用的就是这个&#xff0c;…

最近的一些校招试题摘录

最近又参加了一些校招&#xff0c;真是马不停蹄啊。多参加考试是好的&#xff0c;可以不断发现一些新的问题。下面摘录一些我不太会的题。 1.volatile的作用是什么&#xff1f; 答案&#xff1a;volatile是类型修饰符&#xff0c;用它修饰的类型变量可能会被编译器未知的因素…

yii2中的rules验证规则

2019独角兽企业重金招聘Python工程师标准>>> Rules验证规则&#xff1a;required : 必须值验证属性||CRequiredValidator 的别名, 确保了特性不为空.[[字段名],required,requiredValue>必填值,message>提示信息];email : 邮箱验证||CEmailValidator 的别名,确…

weblogic数据源配置的问题,weblogic密码破解

weblogic 报错 please increase XXX,得知是连接池出了问题&#xff0c;查看weblogic配置&#xff0c;发现没有设置超时 查看oracle 当前session&#xff0c;可以看到连接的机器&#xff0c;用户&#xff0c;当前执行的sqlid select * from v$session; select v$sql where sql_i…

自己写的简易多任务系统---基于pic18fxxx

这个工程只是实现了最简单的OS任务调度&#xff0c;对于理解任务调度有点帮助。其实就是从UC/OS-II里面摘出来的&#xff0c;没有原来的那么复杂&#xff0c;很精简&#xff0c;但道理上是一样的。工程中的CPU.C文件时直接拿Nathan Brown写好的&#xff0c;因为关于PIC任务切换…

python语言整数类型-Python 的内置数值类型

Python 是一种敏捷的、动态类型化的、极富表现力的开源编程语言&#xff0c;可以被自由地安装到多种平台上。Python 代码是被解释的。如果您对编辑、构建和执行循环较为熟悉&#xff0c;则 Python 代码对您来说更简单。但是&#xff0c;请不要搞错&#xff1a;Python 器可以是简…

滴滴出行2016校招编程题

1. 给定一个m*n的数组&#xff08;m,n>2,数组值>0&#xff09;&#xff0c;要求选出和最大的子2*2数组。例如&#xff1a; 1 2 3 4 5 6 7 8 9 显然和最大的2*2子数组是5 6;8 9.下面完成这个功能。 Input: &#xff08;m*n的数组&#xff09; 1 2 3 ; 4 5 6 ; 7 8 9 …

每天一个linux命令(22):find 命令的参数详解

find一些常用参数的一些常用实例和一些具体用法和注意事项。 1&#xff0e;使用name选项&#xff1a; 文件名选项是find命令最常用的选项&#xff0c;要么单独使用该选项&#xff0c;要么和其他选项一起使用。 可以使用某种文件名模式来匹配文件&#xff0c;记住要用引号将文件…

(WPF) DataGrid之绑定

通过ObservableCollection 绑定到 DataGrid. 1. 前台Xaml. <DataGrid x:Name"dgMeasurements"HorizontalAlignment"Left"Margin"10,69,0,10"ItemsSource"{Binding}"AutoGenerateColumns"False"Width"370">…

程序=数据结构+算法

这句名言&#xff0c;我现在品来很有感觉&#xff0c;看看uc/os-II里面那些就绪表、查找最高优先级任务等等&#xff0c;算法设计的非常巧妙&#xff0c;整个OS都是围绕着OS_TCB来运转的&#xff0c;任务需要通信&#xff0c;那就在建立个OS_EVENT&#xff0c;通过.*OSTCBEvent…

去哪笔试两题

1&#xff0c;a是一个有序数组&#xff0c;但经过向右移动数位&#xff0c;现在预在a中查找元素key的位置&#xff0c;如不存在&#xff0c;返回0。例如a[5,6.7.8,1,2,3,4]. 实现&#xff1a; 1 #quna12 def findPos(a,key):3 mina[0];4 for i in range(len(a)):5 …

MySQL5.6主从复制搭建基于日志(binlog)

什么是MySQL主从复制 简单来说&#xff0c;就是保证主SQL&#xff08;Master&#xff09;和从SQL&#xff08;Slave&#xff09;的数据是一致性的&#xff0c;向Master插入数据后&#xff0c;Slave会自动从Master把修改的数据同步过来&#xff08;有一定的延迟&#xff09;&…

opengl 如何加阴影_动漫嘴唇厚涂如何绘制?厚涂嘴唇正确画法

动漫嘴唇厚涂如何绘制&#xff1f;厚涂嘴唇正确画法&#xff01;嘴巴怎么画&#xff1f;画嘴巴真的很考验一个画师功力&#xff0c;好看的嘴巴生动而丰满&#xff0c;可以给整幅画作添上亮点&#xff0c;而画的不好的嘴巴呢&#xff0c;就容易把画面整体的风格打破。那么零基础…

位运算

我们复习一下位运算&#xff0c;这里介绍一下(& ,|, ^)的用途。 按位与 ------------& 规则&#xff1a; 0&00 0&10 1&0 0 1&11 &#xff08; 两位为1&#xff0c;才是1&#xff09;作用&#xff1a; 清零与保位。通常用来将特定的位清零&…