「java请求认证」java国际认证证书

博主:adminadmin 2023-01-15 07:51:08 796

本篇文章给大家谈谈java请求认证,以及java国际认证证书对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA有哪些认证?什么认证最好

目前 Java 相关的认证有四个,分别是 SCJP、SCWD、SCJD、SCAJ,考试时皆以英文出题,但在台湾 SCJP 考试可以选择使用繁体中文版考题。这几项认证考试的特点分述如下:

SCJP(Sun Certified Java Programmer):测试 Java 程序设计的观念和能力,内容偏重于 Java 语法和 JDK 内容。共 59 题复选及填充,时间 2 小时,答对 61% 是及格标准。

SCWD(Sun Certified Web Component Developer for J2EE Platform):内容涵盖 Servlet 与 JSP。考题为 60 题复选及填充,时间 2 小时,答对 70% 是及格标准。

SCJD(Sun Certified Java Developer):测试 Java 软件开发的进阶技能,考试分成两阶段,第一阶段是程序设计题,时间无限制,答对 80% 以上就可以进入第二阶段应试。第二阶段是 5-10 题简答题,时间 90 分钟,答对 70% 以上即可得到 SCJD 认证。

SCAJ(Sun Certified Enterprise Architect for J2EE):测试对于 J2EE 架构的熟悉程度以及系统整合的能力。本考试分成三个阶段,第一个阶段是 48 题复选题,时间 75 分钟,答对 68% 以上方可进入下阶段。第二阶段是系统设计专题,无时间限制,答对 70% 以上方可进入下一阶段。第三阶段是四题申论题,应试时间 90 分钟。

一般考过SCWD就行了,工作绝对没问题,其他的看实力了

关于Java认证考试有几种认证

Java认证考试

SunJava认证分为两个级别:Sun认证Java程序员和Sun认证Java开发员。Sun认证Java程序员考试内容涉及Java所有相关知识、编程概念及applet开发技巧。Sun认证Java开发考试旨在考察您通过应用软件分配进行复杂编程的能力。之后还要测试您完成编程所需的知识。每次考试都包括65道以上的多项选择题,时间大约为90分钟。考试合格后由Sun公司颁发的国际通用的Java程序员证书。

java 建立双向认证 https连接

绝对好用的。直用的这个,GOOD LUCK FOR YOU

public static String httpRequest(String requestUrl, String requestMethod, String outputStr) {

JSONObject jsonObject = null;

StringBuffer buffer = new StringBuffer();

try {

// 创建SSLContext对象,并使用我们指定的信任管理器初始化

TrustManager[] tm = { new MyX509TrustManager() };

SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");

sslContext.init(null, tm, new java.security.SecureRandom());

// 从上述SSLContext对象中得到SSLSocketFactory对象

SSLSocketFactory ssf = sslContext.getSocketFactory();

URL url = new URL(requestUrl);

HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();

httpUrlConn.setSSLSocketFactory(ssf);

httpUrlConn.setDoOutput(true);

httpUrlConn.setDoInput(true);

httpUrlConn.setUseCaches(false);

// 设置请求方式(GET/POST)

httpUrlConn.setRequestMethod(requestMethod);

if ("GET".equalsIgnoreCase(requestMethod))

httpUrlConn.connect();

// 当有数据需要提交时

if (null != outputStr) {

OutputStream outputStream = httpUrlConn.getOutputStream();

// 注意编码格式,防止中文乱码

outputStream.write(outputStr.getBytes("UTF-8"));

outputStream.close();

}

// 将返回的输入流转换成字符串

InputStream inputStream = httpUrlConn.getInputStream();

InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String str = null;

while ((str = bufferedReader.readLine()) != null) {

buffer.append(str);

}

bufferedReader.close();

inputStreamReader.close();

// 释放资源

inputStream.close();

inputStream = null;

httpUrlConn.disconnect();

System.out.println("返回的数据:"+buffer.toString());

// jsonObject = JSONObject.fromObject(buffer.toString());

} catch (ConnectException ce) {

log.error("Weixin server connection timed out.");

} catch (Exception e) {

log.error("https request error:{}", e);

}

return buffer.toString();

}

什么是Java认证?

JAVA,总的来说就是编程的一种,考jave当然是需要你有过硬的JAVA功底,掌握Java语言的特点,实现机制和体系结构。 2. 掌握Java语言中面向对象的特性。 3. 掌握Java语言提供的数据类型和结构。 4. 掌握Java语言编程的基本技术。 5. 会编写Java用户界面程序。 6. 会编写Java简单应用程序。 7. 会编写Java小应用程序(Applet)。 8. 了解Java的应用,搞懂这些,一定会过,JAVA认证,就是JAVA工程师证。

如何用JAVA实现CA认证?

by fleshwound ()

(注:这是我们的完整设计中的一部分,其它有些部分尚要求保密,希望这个拙文能给做J2EE项目的兄弟们带来点帮助,有任何关于JAVA安全和密码学理论和应用的问题可以来我们的论坛:)

近年来,随着互连网和计算机的普及,电子商务和电子政务成为当今社会生活的重要组成部分,以网上订购和网上在线支付的为主要功能的网店系统(Web Shop System)是目前电子商务的热门技术。

JAVA以它“一次编译,处处运行”的神奇魅力和强大的安全技术支持,很快成为WEB信息系统开发的首选语言,而J2EE就是为了WEB应用开发而诞生的。目前J2EE的应用大部份都是多层结构的, 良好的分层可以带来很多好处,例如可以使得代码结构清晰,方便组件复用,可以快速适应应用的新需求。同时,JAVA还提供了强大的安全技术(例如:JCA,HTTPS,JSSA等)。对于电子商务系统而言,系统平台的安全性和效率是其中的核心问题,而这些正好是J2EE及其相关技术的强项。

0 系统中所要使用的API及其特点介绍

该系统中主要使用的技术和特点如下:

(1)EJB :主要是作为J2EE中间层,完成商业逻辑。目前主要有三种类型的EJB: 会话 Bean (Session Bean)、实体Bean (Entity Bean)、消息驱动的Bean(MDB);

(2)JAAS:在J2EE 中用于处理认证和授权服务,进行资源控制;

(3)JSP和Java Servlets:用于J2EE的表示层,生成用户界面;

(4)JDBC:用于数据库(资源层)的连接和与数据库进行交互;

(5)JNDI:Java命名和目录接口,该API实际上是用来访问J2EE的所有资源;

(6)JMS:Java消息传输服务,配合MDB使用。

1 Session的安全问题与解决方案

在项目中,保存Session一般有两种方法,一是分别放在客户端,一是集中放在服务器端。在客户端保存Session是指将Session的状态串行化,然后嵌入到返回给客户的HTML页面中。当Session中的信息很少时,这样实现比较容易,另外这种方法还消除了跨越多个服务器复制状态的问题。

但是在客户端保存Session状态时,必须考虑到由此带来的安全问题,因为黑客可能通过嗅探攻击(Sniffer)获取敏感信息。为了不让敏感信息数据暴露,解决的方法是对数据进行加密或者使用HTTPS,采用SSL技术。

如果是要保存大量Session状态的应用,最好的方法是将Session状态统一放在服务器端。当状态被保存在服务器上时,不会有客户端Session管理的大小和类型限制。此外,还避免了由此带来的安全问题,而且也不会遇到由于在每个请求间传送Session状态带来的性能影响,但是对服务器的性能要求比较高。网店系统的安全性要求较高,因此Session还是集中放在中间层服务器端,同时对客户端到服务器端采用SSL连接。

2客户端的缓存安全设计

大部分顾客使用的WEB浏览器将浏览过的页面缓存在磁盘上,这样我们浏览网页的时候不需要重新向服务器发出HTTP请求,对于普通的网页不存在安全问题。但是对于需要保密的WEB应用,会带来安全隐患和泄漏隐私,因此对于客户端缓存,也必须做适当的处理。最好的方法就是禁止使用缓存,但是对于大部分顾客而言,要求在客户端不用缓存是不现实的,因此我们必须在中间层解决该问题,方法是采用Servlet过滤器技术。该技术是Servlet2.3以后才出现的,在J2EE中的应用很广泛。要使用该技术,需要执行以下步骤:

(1) 编写一个Servlet过滤器,实现javax.servlet.Filter接口;

(2) 修改Web.xml文件,使容器知道过滤器在什么时候被调用。

Javax.servlet.Filter主要有3个方法:

(1)init(FilterConfig cfg) :当开始使用 servlet 过滤器服务时,容器调用此方法一次。传送给此方法的 FilterConfig 参数包含 servlet 过滤器的初始化参数;

(2)destroy() :当不再使用 servlet 过滤器服务时,容器调用此方法;

(3)doFilter(ServletRequest req, ServletResponse res, FilterChain chain): 容器为每个映射至此过滤器的 servlet 请求调用此方法,然后才调用该 servlet 本身。传送至此方法的 FilterChain 参数可用来调用过滤器链中的下一个过滤器。当链中的最后一个过滤器调用 chain.doFilter() 方法时,将运行最初请求的 servlet。因此,所有过滤器都应该调用 chain.doFilter() 方法。如果过滤器代码中的附加认证检查导致故障,则不需要将原始 servlet 实例化。在这种情况下,不需要调用 chain.doFilter() 方法,相反,可将其重定向至其它一些错误页面。

如果 servlet 映射至许多 servlet 过滤器,则按照应用程序的部署描述符(web.xml)中的先后出现的次序来调用 servlet 过滤器。这一部分的主要代码如下:

//要引入的类库

import javax.servlet.*;

import javax.servlet.http.HttpServletResponse;

import java.io.*;

import java.security.*;

//设置servlet过滤代码段

public class CacheFilter implements Filter {

protected FilterConfig filterConfig;

private String cachetp;

//初始化

public void init(FilterConfig filterConfig) throws ServletException

{

this.filterConfig = filterConfig;

cachetp=config.getInitParameter("CacheControlType");

if (cachetp==null)

{

throw new ServletException("没有定义Cache控制类型");

}

}

//

public void destroy()

{

this.filterConfig = null;

}

//执行过滤器部分

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)

throws IOException, ServletException {

if (response instanceof HttpServletResponse )

{

HttpServletResponse resp=(HttpServletResponse) response;

resp.addHeader("Cache-Control",cachetp);

}

else

{

throw new ServletException("非法相应!");

}

chain.doFilter(request, response);

}

}

以下是在Web.xml中添加的对应的内容

CacheFilter

CacheFilter

Cache filter

CacheControlType

no-store

CacheFilter

/cachecontrol

3视图访问的安全设置

所有用户都必须登陆,只有登陆才可以看到用户的角色和权限相对应的视图。因此一个重要的问题就是如何防止一个视图或者部分的视图被一个未被授权的客户直接访问。

在一些情况下,资源被限制为完全不允许某些用户访问,例如:管理后台就不应该让普通顾客会员访问。有几个方法可以做到这一点。一个方法是加入应用逻辑到处理控制器或者视图的程序中,禁止某些用户访问。另一个方案是设置运行时的系统,对于一些资源,仅允许经由另一个应用资源内部调用。在这种情形,对于这些资源的访问必须被通过另一个表现层的应用资源进行,例如一个servlet控制器。对于这些受限制的资源不允许通过浏览器直接调用。

在J2EE中,可以利用Web容器中内置的安全技术来进行角色访问资源的控制。根据最新版本的servlet和EJB规范,安全限制在web.xml的配置描述文件中描述,我们可以通过配置web.xml来控制角色访问,修改配置描述文件web.xml就可以达到快速修改安全策略的目的。

安全限制允许使用编程的方法根据用户的角色来控制访问。资源可以被某些角色的用户访问,同时禁止其它的角色访问。另外,某个视图的一部分也可以根据用户的角色来限制其访问。如果某些资源完全不允许来自于浏览器的直接访问,那么这些资源可以配置只允许一些特殊的安全角色访问,而这些安全角色不分配给任何一个用户。这样只要不分配这个安全角色,那么以这种方式配置的资源将禁止所有的浏览器直接访问。下面一个例子就是web.xml配置文件的一部分,它定义了一个安全的角色以限制直接的浏览器访问。角色的名字是“vip”,受限制资源的名字是specialgood1.jsp、specialgood2.jsp、specialgood3.jsp和bookinfo.jsp。除非一个用户或者组被分配到“vip”角色,否则这些客户都不可以直接访问这些JSP页面。不过,由于内部的请求并不受这些安全的限制,一个初始时由某servlet控制器处理的请求将会导向到这些受限制的页面,这样它们就可以间接访问这些JSP页面。

<security-constraint>

<web-resource-collection>

<web-resource-name>specialgood </web-resource-name>

<description>special good infomation</description>

<url-pattern>/shop/jsp/a1/specialgood1.jsp</url-pattern>

<url-pattern>/shop/jsp/a1/specialgood2.jsp</url-pattern>

<url-pattern>/shop/jsp/a1/specialgood3.jsp</url-pattern>

<url-pattern>/shop/jsp/a1/bookinfo.jsp</url-pattern>

<http-method>GET</http-method>

<http-method>POST</http-method>

</web-resource-collection>

<auth-constraint>

<role-name>vip</role-name>

</auth-constraint>

</security-constraint>

3 各层次间的耦合问题与解决策略

表现层的数据结构,例如HttpServletRequest,应该被限制在表现层上。如果将这些细节放到其它层(主要是业务逻辑层)中,将大大降低了代码的的重用性,令代码变得复杂,并且增加了层间的耦合。解决方法一个常用方法是不让表现层的数据结构和商业层共享,而是拷贝相关的状态到一个更常见的数据结构中再共享。你也可以选择由表现层数据结构中将相关的状态分离出来,作为独立的参数共享。另外在域对象暴露表现层的数据结构,如果将诸如HttpServletRequest的请求处理数据结构和域对象共享,这样做也会增加了应用中两个不同方面的耦合。域对象应该是可重用的组件,如果它们的实现依赖协议或者层相关的细节,它们可重用性就很差,同时维护和调试高耦合的应用更加困难。成熟的解决方案是不通过传送一个HttpServletRequest对象作为一个参数,而是拷贝request对象的状态到一个更为常用的数据结构中,并且将这个对象共享给域对象。你也可以选择由HttpServletRequest对象中将相关的状态分离出来,并且将每一个的状态作为一个独立的参数提供给域对象。

4 EJB的安全设计与控制

EJB的执行过程一般是这样的:(1)客户端通过JNDI检索Home对象的引用;(2)JNDI返回Home对象的引用;(3)请求创建一个新的EJB对象;(4)创建EJB对象;(5)返回EJB对象;(6)调用商务方法;(7)调用Enterprise Bean.引起EJB的安全问题原因主要存在三个方面:

(1)用包嗅探器(Packet Sniffer)获取用户凭证信息并直接调用会话Bean;(2)对实体Bean进行未授权访问;(3)对消息驱动的Bean的无效访问(发布恶意或者虚假的消息).

以上安全问题可导致客户端或者服务端欺骗攻击和DDOS攻击。解决问题(1)的方法是使用JAVA中SSL技术来保护通讯,解决(2)的方法是对于实体Bean全部采用本地接口或者采用JAAS(文献[1]),对于(1)和(2),我们可以同时采取以下措施:让容器完成认证并传输用户凭证信息,另外使用声明性或者程序设计的安全验证角色。对于问题(3),J2EE并没有提供一个很好的方案,我们的解决方案是采用数字签名技术来保证信息来自可信任的源。该方法的结合代码简要说明如下,消息采用JMS传递:

//客户端,要用到消息发送者的私钥进行签名

...

message.setString("userid",userid);

message.setString("useritem",useritem);

message.setInt("usersn",serialnum);//包含一个序列号

message.setString("usercertid",certid);

String signature=getSignature(userid+":"+useritem+":"+serialnum+":"+certid);

//进行签名,其中getSignature为签名函数,要用到消息发送者的私钥进行签名,具体密码学技术可参考文献[2];

message.setString("signature",signature);

sendmessage(message);//发送信息

...

//服务器端

String checkstr=userid+":"+message.getString("useritem")+":"+

message.getInt("usersn")+":"+usercertid;

boolean b_check=checkSignature(checkstr,msg.getString("signature"),

usercertid,userid);

//进行验证,其中checkSignature为验证函数,要用到消息发送者的公钥进行验证,具体密码学技术可参考文献[2];

5 CA中心与证书的生成

前面我们已经提出在客户端要使用HTTPS和SSL,因此要建立一个自己的CA中心来管理分发证书,加强客户端到中间层服务器端通讯的安全性.建立CA中心的第一步是利用JAVA工具包中的Keytool生成一个X509证书,然后将该证书交由权威CA中心Vertsign签名,再将该证书设置为根证书,建立自己的CA.每次有新用户注册交易的时候,都必须签发一个用户独一无二的证书,关键的过程是如何签发证书.签发证书的过程如下:

(1)从中间层CA服务器的密钥库中读取CA的证书:

FileInputStream in=new FileInputStream(ShopCAstorename);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in,storepass);

java.security.cert.Certificate c1=ks.getCertificate(alias);

(2)获得CA的私钥:

PrivateKey caprk=(PrivateKey)ks.getKey(alias,cakeypass);

(3)从CA的证书中提取签发者信息:

byte[] encod1=c1.getEncoded();

X509CertImpl shopcimp1=new X509CertImpl(encod1);

X509CertInfo shopcinfo1=(X509CertInfo)shopcimp1.get(X509CertImpl.NAME+

"."+X509CertImpl.INFO);

X500Name issuer=(X500Name)shopcinfo1.get(X509CertInfo.SUBJECT+

"."+CertificateIssuerName.DN_NAME);

(4)获取待签发的证书相关信息,与(3)类似;

(5)设置新证书的有效期、序列号、签发者和签名算法:

//设置新证书有效期为1年

Date begindate =new Date();

Date enddate =new Date(begindate.getTime()+3000*24*360*60*1000L); CertificateValidity cv=new CertificateValidity(begindate,enddate);

cinfo2.set(X509CertInfo.VALIDITY,cv);

//设置新证书序列号

int sn=(int)(begindate.getTime()/1000);

CertificateSerialNumber csn=new CertificateSerialNumber(sn);

cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);

//设置新证书签发者

cinfo2.set(X509CertInfo.ISSUER+"."+

CertificateIssuerName.DN_NAME,issuer);

//设置新证书算法

AlgorithmId algorithm =

new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);

cinfo2.set(CertificateAlgorithmId.NAME+

"."+CertificateAlgorithmId.ALGORITHM, algorithm);

(6)创建证书并签发:

// 创建证书

X509CertImpl newcert=new X509CertImpl(cinfo2);

// 签名

newcert.sign(caprk,"MD5WithRSA");

(7)将新证书提供给注册用户,并提示安装,一般的做法是在用户注册成功后系统立即返回一个证书对象给中间层某个Servlet,由其返回给用户。

参考文献

[1]沈耀,陈昊鹏,李新颜.EJB容器中基于JAAS 的安全机制的实现.[J]:计算机应用与软件 2004.9 16~18

[2](美)Jess Garms著,庞南等译. Java安全性编程指南[M].北京:电子工业出版社 2002

[3]

[4] 蔡剑,景楠. Java 网络程序设计:J2EE(含1.4最新功能)[M].北京: 清华大学出版社 2003

[5](美)John Bell Tony Loton. Java Servlets 2.3编程指南[M].北京: 电子工业出版社 2002

[6](美)Joseph J.Bambara等著,刘堃等译. J2EE技术内幕[M].北京:机械工业出版社 2002

[7](美)Li Gong著.JAVA 2平台安全技术——结构、API设计和实现[M].北京: 机械工业出版社 2000

[8](英)Danny Ayers等著,曾国平等译. Java服务器高级编程[M].北京:机械工业出版社 2005

[9]

[10]

Java如何实现验证码验证功能

Java如何实现验证码验证功能呢?日常生活中,验证码随处可见,他可以在一定程度上保护账号安全,那么他是怎么实现的呢?

Java实现验证码验证功能其实非常简单:用到了一个Graphics类在画板上绘制字母,随机选取一定数量的字母随机生成,然后在画板上随机生成几条干扰线。

首先,写一个验证码生成帮助类,用来绘制随机字母:

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Random;

import javax.imageio.ImageIO;

public final class GraphicHelper {

/**

* 以字符串形式返回生成的验证码,同时输出一个图片

*

* @param width

*            图片的宽度

* @param height

*            图片的高度

* @param imgType

*            图片的类型

* @param output

*            图片的输出流(图片将输出到这个流中)

* @return 返回所生成的验证码(字符串)

*/

public static String create(final int width, final int height, final String imgType, OutputStream output) {

StringBuffer sb = new StringBuffer();

Random random = new Random();

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics graphic = image.getGraphics();

graphic.setColor(Color.getColor("F8F8F8"));

graphic.fillRect(0, 0, width, height);

Color[] colors = new Color[] { Color.BLUE, Color.GRAY, Color.GREEN, Color.RED, Color.BLACK, Color.ORANGE,

Color.CYAN };

// 在 "画板"上生成干扰线条 ( 50 是线条个数)

for (int i = 0; i  50; i++) {

graphic.setColor(colors[random.nextInt(colors.length)]);

final int x = random.nextInt(width);

final int y = random.nextInt(height);

final int w = random.nextInt(20);

final int h = random.nextInt(20);

final int signA = random.nextBoolean() ? 1 : -1;

final int signB = random.nextBoolean() ? 1 : -1;

graphic.drawLine(x, y, x + w * signA, y + h * signB);

}

// 在 "画板"上绘制字母

graphic.setFont(new Font("Comic Sans MS", Font.BOLD, 30));

for (int i = 0; i  6; i++) {

final int temp = random.nextInt(26) + 97;

String s = String.valueOf((char) temp);

sb.append(s);

graphic.setColor(colors[random.nextInt(colors.length)]);

graphic.drawString(s, i * (width / 6), height - (height / 3));

}

graphic.dispose();

try {

ImageIO.write(image, imgType, output);

} catch (IOException e) {

e.printStackTrace();

}

return sb.toString();

}

接着,创建一个servlet,用来固定图片大小,以及处理验证码的使用场景,以及捕获页面生成的验证码(捕获到的二维码与用户输入的验证码一致才能通过)。

import java.io.OutputStream;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

@WebServlet(urlPatterns = "/verify/regist.do" )

public class VerifyCodeServlet extends HttpServlet {

private static final long serialVersionUID = 3398560501558431737L;

@Override

protected void service(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 获得 当前请求 对应的 会话对象

HttpSession session = request.getSession();

// 从请求中获得 URI ( 统一资源标识符 )

String uri = request.getRequestURI();

System.out.println("hello : " + uri);

final int width = 180; // 图片宽度

final int height = 40; // 图片高度

final String imgType = "jpeg"; // 指定图片格式 (不是指MIME类型)

final OutputStream output = response.getOutputStream(); // 获得可以向客户端返回图片的输出流

// (字节流)

// 创建验证码图片并返回图片上的字符串

String code = GraphicHelper.create(width, height, imgType, output);

System.out.println("验证码内容: " + code);

// 建立 uri 和 相应的 验证码 的关联 ( 存储到当前会话对象的属性中 )

session.setAttribute(uri, code);

System.out.println(session.getAttribute(uri));

}

接着写一个HTML注册页面用来检验一下:

html

head

meta charset="UTF-8"

title注册/title

link rel="stylesheet" href="styles/general.css"

link rel="stylesheet" href="styles/cell.css"

link rel="stylesheet" href="styles/form.css"

script type="text/javascript" src="js/ref.js"/script

style type="text/css" 

.logo-container {

margin-top: 50px ;

}

.logo-container img {

width: 100px ;

}

.message-container {

height: 80px ;

}

.link-container {

height: 40px ;

line-height: 40px ;

}

.link-container a {

text-decoration: none ;

}

/style

/head

body

div class="container form-container"

form action="/wendao/regist.do" method="post"

div class="form" !-- 注册表单开始 --

div class="form-row"

span class="cell-1"

i class="fa fa-user"/i

/span

span class="cell-11" style="text-align: left;"

input type="text" name="username" placeholder="请输入用户名"

/span

/div

div class="form-row"

span class="cell-1"

i class="fa fa-key"/i

/span

span class="cell-11" style="text-align: left;"

input type="password" name="password" placeholder="请输入密码"

/span

/div

div class="form-row"

span class="cell-1"

i class="fa fa-keyboard-o"/i

/span

span class="cell-11" style="text-align: left;"

input type="password" name="confirm" placeholder="请确认密码"

/span

/div

div class="form-row"

span class="cell-7"

input type="text" name="verifyCode" placeholder="请输入验证码"

/span

span class="cell-5" style="text-align: center;"

img src="/demo/verify/regist.do" onclick="myRefersh(this)"

/span

/div

div class="form-row" style="border: none;"

span class="cell-6" style="text-align: left"

input type="reset" value="重置"

/span

span class="cell-6"  style="text-align:right;"

input type="submit" value="注册"

/span

/div

/div !-- 注册表单结束 --

/form

/div

/body

/html

效果如下图:

在控制台接收到的图片中验证码的变化如下:

当点击刷新页面的时候,验证码也会随着变化,但我们看不清验证码时,只要点击验证码就会刷新,这样局部的刷新可以用JavaScript来实现。

在img

src="/demo/verify/regist.do"中,添加一个问号和一串后缀数字,当刷新时让后缀数字不断改变,那么形成的验证码也会不断变化,我们可以采用的一种办法是后缀数字用date代替,date获取本机时间,时间是随时变的,这样就保证了刷新验证码可以随时变化。

代码如下:

function myRefersh( e ) {

const source = e.src ; // 获得原来的 src 中的内容

//console.log( "source : " + source  ) ;

var index = source.indexOf( "?" ) ;  // 从 source 中寻找 ? 第一次出现的位置 (如果不存在则返回 -1 )

//console.log( "index : " + index  ) ;

if( index  -1 ) { // 如果找到了 ?  就进入内部

var s = source.substring( 0 , index ) ; // 从 source 中截取 index 之前的内容 ( index 以及 index 之后的内容都被舍弃 )

//console.log( "s : " + s  ) ;

var date = new Date(); // 创建一个 Date 对象的 一个 实例

var time = date.getTime() ; // 从 新创建的 Date 对象的实例中获得该时间对应毫秒值

e.src = s + "?time=" + time ; // 将 加了 尾巴 的 地址 重新放入到 src 上

//console.log( e.src ) ;

} else {

var date = new Date();

e.src = source + "?time=" + date.getTime();

}

}

如回答不详细可追问

java请求认证的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java国际认证证书、java请求认证的信息别忘了在本站进行查找喔。