java⽣成token实例_Java⼤⽩话—–Token⼊门案例(附demo
下载)
Java⼤⽩话—–Token⼊门案例
Token⼊门案例今天为⼤家介绍⼀下Token的基本原理(以最直⽩的⽅式)
两⽚同样的钥匙
这是⼀家神奇的酒店,所有的客房居然都没有钥匙孔,可是每间房们前都做着⼀位钥匙匠。
这种⾰命性的酒店安全管理⽅式是这样的:
客⼈来到⼤厅,告诉前台他的账号与密码,前台给了他⼀把钥匙
他拿着钥匙来到房门前,钥匙匠询问了他的姓名,随即做出了⼀把钥匙,再与前台的钥匙进⾏⽐对,如果⼀致,⽤户就可以进门了。
从现在起,这家酒店成为了⼀家不需要保存⽤户账户信息的酒店!
以上就是基本概念了
再说说基本的技术实现路线:
1.⽤户在登录页⾯输⼊账号密码,提交后,java后台进⾏⼀次验证,如果正确,则为⽤户制作token令牌
具体制作过程:
将传过来的值进⾏⼀个加密就可以了制作成token令牌了,⼀般来说,选⽤md5加密⽅式,参数⽅⾯,可以使⽤⽤户名+秘钥
2.将加密后的字符串传给前端
3.前端使⽤cookie保存token和⽤户名
4.使⽤,获取⽤户名和token,使⽤⽤户名再制作token,然后⽐对,如果⼀致就可以放⾏了
好了现在我们来举个栗⼦
先简单介绍下项⽬结构
JFinal + mysql + jQuery
其实呢,JFinal这个框架还是很简单的,去⽹上⼀个demo看看就好
先贴出login页⾯
pageEncoding="UTF-8"%>
Insert title here
username:
password:
$(document).ready(function(){
$("#p").click(function(){
$("#loginForm").ajaxSubmit({
success : function(data) {
console.log(data);
if(data.flag){
$.cookie('userToken', ken);
$.cookie('username',$("#username").val());
$.cookie('password',$("#password").val());
}
else alert("账号密码错误");
}
});
});
});
然后当然是这个页⾯的处理⽅法
package controller;
import java.util.HashMap;
import java.util.Map;
import util.SecurityUitl;
import Controller;
import service.UserService;
public class TokenController extends Controller {
private UserService userService = new UserService();
public void signIn(){
String username = getPara("username");
String password = getPara("password");
System.out.print(username+password);
boolean loginCheck = userService.login(username, password);//向数据库验证⽤户名和密码if(loginCheck){
//token逻辑
Map a = new HashMap();
a.put("username", username);
a.put("miyao", "111111");
Map token = new HashMap();
setAttr("flag",true);
setAttr("token",SecurityUitl.authentication(a));
renderJson();//向前端返回数据
}
else{
setAttr("flag",false);
renderJson();
}
}
public void userAu(){
String username = getPara("username");
String token = getPara("token");
Map a = new HashMap();
a.put("username", username);
a.put("miyao", "111111");
renderJson(SecurityUitl.judeAu(a, token));
}
}
具体的token加密实现我就不说了,⽹上⼤把,我上传的代码包⾥⾯也有。
到这⼀步,⽤户成功登陆后,token就已经保存到cookie中了。然后是token的验证使⽤:
package interceptor;
import java.util.HashMap;
import java.util.Map;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import fig.Interceptors;
import Controller;
import der.Render;
import util.SecurityUitl;
public class AuthInterceptor implements Interceptor{
private String[] interceptList = {"/login.jsp","/token/signIn"};
jfinal项目实例@Override
public void intercept(Invocation invocation) {
// TODO Auto-generated method stub
System.out.println("");
//排除拦截,避免死循环
boolean flag = true;
for(int i = 0 ; i < interceptList.length ; i = i + 1){
ActionKey().equals(interceptList[i])) flag = false;
}
if(flag){
Controller controller = Controller();
//controller.setSessionAttr("flag", true);
//Boolean loginUser = SessionAttr("flag");
System.out.println("getUserController:"+Cookie("userToken")); Map a = new HashMap();
a.put("username", Cookie("username"));
a.put("miyao", "111111");
Cookie("userToken").equals(SecurityUitl.authentication(a))){ System.out.println("token验证成功,进⼊主页");
invocation.invoke();
}
else{
System.out.println("跳转到登陆页⾯");
}
}
else invocation.invoke();
}
}
然后写⼀个简单的index页来测试⼀下
pageEncoding="UTF-8"%>
Insert title here
我是主页
alert($.cookie("userToken"));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。