导航:首页 > 源码编译 > javaweb使用token源码

javaweb使用token源码

发布时间:2022-05-27 06:00:30

❶ 如何在web端采用有效的token机制进行鉴权

我之前做的一个项目就是http+sessionid做的,登陆之后会有一个token,token会有时间限制,超时就回要重新登陆。用这个token和固定的一个字符串加密来往的数据。用https 没有弄过,不知道好不好弄。

java做的restful通过(API key或者token)认证方式的代码是怎样的最好能提供例子,坐等高手回答,急急急!

你提供一个n位的字符串,让客户调用的时候传递过去,让人的服务器验证是否你提供的。——当然这个字串是有算法的,不是随便写的。

❸ java web token 验证登录是否有效

首先,你的web需要有登入后将登录信息保存到session的过程,在用户访问那些需要登录的页面或者action的时候(可以用过过滤器,或者直接在相应的页面判断),从session里面获取登录信息,如果没有,则说明没有登录.跳转到登录页面后,登陆成功,保存登录信息到session,这个时候再访问原先的,就可以通过验证..一整个流程大概就是这样.重点就是登录信息保存在session里面,验证用户是否登录,就依据这个了

❹ WEB应用使用token做登录验证时,为何大多将token放入请求头,而不是直接放入post/get参数里

可能是影响数据整洁性吧,毕竟每个接口接受的数据格式不一样,也有可能安全策略

❺ Java如何登录token的代码是什么

首先是Token主类。类很简单

package com.company.util;

import java.util.ArrayList;

import javax.servlet.http.HttpSession;

public class Token {

private static final String TOKEN_LIST_NAME = "tokenList";

public static final String TOKEN_STRING_NAME = "token";

private static ArrayList getTokenList(HttpSession session) {

Object obj = session.getAttribute(TOKEN_LIST_NAME);

if (obj != null) {

return (ArrayList) obj;

} else {

ArrayList tokenList = new ArrayList();

session.setAttribute(TOKEN_LIST_NAME, tokenList);

return tokenList;

}

}

private static void saveTokenString(String tokenStr, HttpSession session) {

ArrayList tokenList = getTokenList(session);

tokenList.add(tokenStr);

session.setAttribute(TOKEN_LIST_NAME, tokenList);

}

private static String generateTokenString(){

return new Long(System.currentTimeMillis()).toString();

}

/** *//**

* Generate a token string, and save the string in session, then return the token string.

*

* @param HttpSession

* session

* @return a token string used for enforcing a single request for a particular transaction.

*/

public static String getTokenString(HttpSession session) {

String tokenStr = generateTokenString();

saveTokenString(tokenStr, session);

return tokenStr;

}

/** *//**

* check whether token string is valid. if session contains the token string, return true.

* otherwise, return false.

*

* @param String

* tokenStr

* @param HttpSession

* session

* @return true: session contains tokenStr; false: session is null or tokenStr is id not in session

*/

public static boolean isTokenStringValid(String tokenStr, HttpSession session) {

boolean valid = false;

if(session != null){

ArrayList tokenList = getTokenList(session);

if (tokenList.contains(tokenStr)) {

valid = true;

tokenList.remove(tokenStr);

}

}

return valid;

}

}

在jsp页面端。

首先import该类:

<%@ page import="com.company.util.Token" %>

表单包含隐藏的token字符串:

<form>

<input type="hidden" name="<%=Token.TOKEN_STRING_NAME %>" value="<%=Token.getTokenString(session) %>">

</form>

在Servlet中添加如下代码。

if(Token.isTokenStringValid(request.getParameter(Token.TOKEN_STRING_NAME), request.getSession())){

//进行正常业务流程

❻ javaweb给app接口用token实现,请问这个怎么搞 准备用https+sessionid来实现给app提供接口,靠谱吗。

弄个md5加密验证,把用户名 ,时间戳,加完密的值都放入请求头中

❼ 请教Java 登录token的代码

Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。

这时其实也就是两点,第一:你需要在请求中有这个令牌值,请求中的令牌值如何保存,其实就和我们平时在页面中保存一些信息是一样的,通过隐藏字段来保存,保存的形式如: 〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value=""〉,这个value是TokenProcessor类中的generateToken()获得的,是根据当前用户的session id和当前时间的long值来计算的。第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。下面就以在数据库中插入一条数据来说明如何防止重复提交。

在Action中的add方法中,我们需要将Token值明确的要求保存在页面中,只需增加一条语句:saveToken(request);,如下所示:

public ActionForward add(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

//前面的处理省略

saveToken(request);

return mapping.findForward("add");

}在Action的insert方法中,我们根据表单中的Token值与服务器端的Token值比较,如下所示:

public ActionForward insert(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

if (isTokenValid(request, true)) {

// 表单不是重复提交

//这里是保存数据的代码

} else {

//表单重复提交

saveToken(request);

//其它的处理代码

}

}

其实使用起来很简单,举个最简单、最需要使用这个的例子:

一般控制重复提交主要是用在对数据库操作的控制上,比如插入、更新、删除等,由于更新、删除一般都是通过id来操作(例如:updateXXXById, removeXXXById),所以这类操作控制的意义不是很大(不排除个别现象),重复提交的控制也就主要是在插入时的控制了。

先说一下,我们目前所做项目的情况:

目前的项目是用Struts+Spring+Ibatis,页面用jstl,Struts复杂View层,Spring在Service层提供事务控制,Ibatis是用来代替JDBC,所有页面的访问都不是直接访问jsp,而是访问Structs的Action,再由Action来Forward到一个Jsp,所有针对数据库的操作,比如取数据或修改数据,都是在Action里面完成,所有的Action一般都继承BaseDispatchAction,这个是自己建立的类,目的是为所有的Action做一些统一的控制,在Struts层,对于一个功能,我们一般分为两个Action,一个Action里的功能是不需要调用Struts的验证功能的(常见的方法名称有add,edit,remove,view,list),另一个是需要调用Struts的验证功能的(常见的方法名称有insert,update)。

就拿论坛发贴来说吧,论坛发贴首先需要跳转到一个页面,你可以填写帖子的主题和内容,填写完后,单击“提交”,贴子就发表了,所以这里经过两个步骤:

1、转到一个新增的页面,在Action里我们一般称为add,例如:

public ActionForward add(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

//这一句是输出调试信息,表示代码执行到这一段了

log.debug(":: action - subject add");

//your code here

//这里保存Token值

saveToken(request);

//跳转到add页面,在Structs-config.xml里面定义,例如,跳转到subjectAdd.jsp

return mapping.findForward("add");

}

2、在填写标题和内容后,选择 提交 ,会提交到insert方法,在insert方法里判断,是否重复提交了。

public ActionForward insert(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response){

if (isTokenValid(request, true)) {

// 表单不是重复提交

//这里是保存数据的代码

} else {

//表单重复提交

saveToken(request);

//其它的处理代码

}

}

下面更详细一点(注意,下面所有的代码使用全角括号):

1、你想发贴时,点击“我要发贴”链接的代码可以里这样的:

〈html:link action="subject.do?method=add"〉我要发贴〈/html:link〉

subject.do 和 method 这些在struct-config.xml如何定义我就不说了,点击链接后,会执行subject.do的add方法,代码如上面说的,跳转到subjectAdd.jsp页面。页面的代码大概如下:

〈html:form action="subjectForm.do?method=insert"〉

〈html:text property="title" /〉

〈html:textarea property="content" /〉

〈html:submit property="发表" /〉

〈html:reset property="重填" /〉

〈html:form〉

如果你在add方法里加了“saveToken(request);”这一句,那在subjectAdd.jsp生成的页面上,会多一个隐藏字段,类似于这样〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value=""〉,

2、点击发表后,表单提交到subjectForm.do里的insert方法后,你在insert方法里要将表单的数据插入到数据库中,如果没有进行重复提交的控制,那么每点击一次浏览器的刷新按钮,都会在数据库中插入一条相同的记录,增加下面的代码,你就可以控制用户的重复提交了。

if (isTokenValid(request, true)) {

// 表单不是重复提交

//这里是保存数据的代码

} else {

//表单重复提交

saveToken(request);

//其它的处理代码

}

注意,你必须在add方法里使用了saveToken(request),你才能在insert里判断,否则,你每次保存操作都是重复提交。

记住一点,Struts在你每次访问Action的时候,都会产生一个令牌,保存在你的Session里面,如果你在Action里的函数里面,使用了saveToken(request);,那么这个令牌也会保存在这个Action所Forward到的jsp所生成的静态页面里。

如果你在你Action的方法里使用了isTokenValid,那么Struts会将你从你的request里面去获取这个令牌值,然后和Session里的令牌值做比较,如果两者相等,就不是重复提交,如果不相等,就是重复提交了。

由于我们项目的所有Action都是继承自BaseDispatchAction这个类,所以我们基本上都是在这个类里面做了表单重复提交的控制,默认是控制add方法和insert方法,如果需要控制其它的方法,就自己手动写上面这些代码,否则是不需要手写的,控制的代码如下:

public abstract class BaseDispatchAction extends BaseAction {

protected ActionForward perform(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

String parameter = mapping.getParameter();

String name = request.getParameter(parameter);

if (null == name) { //如果没有指定 method ,则默认为 list

name = "list";

}

if ("add".equals(name)) {

if ("add".equals(name)) {

saveToken(request);

}

} else if ("insert".equals(name)) {

if (!isTokenValid(request, true)) {

resetToken(request);

saveError(request, new ActionMessage("error.repeatSubmit"));

log.error("重复提交!");

return mapping.findForward("error");

}

}

return dispatchMethod2(mapping, form, request, response, name);

}

}

❽ java token有什么用

Struts本身有一套完善的防止重复提交表单的Token(令牌)机制,但笔者目前的项目自写的framework没有用到Struts,故也得自写防止用户因为后退或者刷新来重复提交表单内容的Token机制。不难,容易实现。

实现原理:一致性。jsp生成表单时,在表单中插入一个隐藏<input>字段,该字段就是保存在页面端的token字符串,同时把该字符串存入session中。等到用户提交表单时,会一并提交该隐藏的token字符串。在服务器端,查看下是否在session中含有与该token字符串相等的字符串。如果有,那么表明是第一次提交该表单,然后删除存放于session端的token字符串,再做正常业务逻辑流程;如果没有,那么表示该表单被重复提交,做非正常流程处理,可以警告提示也可以什么也不做。 网络的.

❾ java中 TOKEN的概念

token 你可以把他当做一个令牌,当第一次访问时设置一个令牌保存,一般我们保存在session中,当启动令牌时,那么就去检测令牌是否一致,然后销毁令牌或者重置令牌,这样第二次再用次令牌访问时,就会不一致了,直接提示重复提交了

❿ java json web token 什么用

所有的数据转成jsonStr 发给客户端 客户端接收后 再把jsonStr转换成你需要的格式

阅读全文

与javaweb使用token源码相关的资料

热点内容
java解析网页 浏览:836
2020广西艺术分算法 浏览:101
手机解压文件大不能解压 浏览:99
android获取当前系统时间 浏览:324
苹果电脑安卓版怎么还原 浏览:612
javaftpjar 浏览:324
phpmysql自增id 浏览:920
仿抖音系统源码建站 浏览:746
云服务器搭建sqlserver2008 浏览:950
如何查看服务器安全组 浏览:429
云服务器会保存app记录吗 浏览:716
程序员身份证年龄 浏览:943
appstore如何注册一个美国帐号 浏览:321
春笋公式源码 浏览:497
蔚来app如何反馈 浏览:51
基础生态学pdf 浏览:957
cp2012单片机 浏览:990
张晓谦程序员 浏览:115
取消应用加密忘记密码 浏览:998
心熵pdf 浏览:809