Java大白話—–Token入門案例(附demo下載)

Java大白話—–Token入門案例javascript

Token入門案例今天爲你們介紹一下Token的基本原理(以最直白的方式)html

兩片一樣的鑰匙前端

這是一家神奇的酒店,全部的客房竟然都沒有鑰匙孔,但是每間房們前都作着一位鑰匙匠。java

這種革命性的酒店安全管理方式是這樣的:mysql

客人來到大廳,告訴前臺他的帳號與密碼,前臺給了他一把鑰匙jquery

他拿着鑰匙來到房門前,鑰匙匠詢問了他的姓名,隨即作出了一把鑰匙,再與前臺的鑰匙進行比對,若是一致,用戶就能夠進門了。ajax

從如今起,這家酒店成爲了一家不須要保存用戶帳戶信息的酒店!sql

以上就是基本概念了數據庫

再說說基本的技術實現路線:安全

1.用戶在登陸頁面輸入帳號密碼,提交後,java後臺進行一次驗證,若是正確,則爲用戶製做token令牌

具體制做過程:

將傳過來的值進行一個加密就能夠了製做成token令牌了,通常來講,選用md5加密方式,參數方面,可使用用戶名+祕鑰

2.將加密後的字符串傳給前端

3.前端使用cookie保存token和用戶名

4.使用攔截器,獲取用戶名和token,使用用戶名再製做token,而後比對,若是一致就能夠放行了

好了如今咱們來舉個栗子

先簡單介紹下項目結構

JFinal + mysql + jQuery

其實呢,JFinal這個框架仍是很簡單的,去網上找一個demo看看就好

先貼出login頁面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src ="js/jquery-1.8.3.min.js"type="text/javascript"></script>
<script src ="js/jquery.cookie.js"type="text/javascript"></script>
<script src ="js/jquery.form.js"type="text/javascript"></script>

</head>
<body>
<form action="token/signIn" id = loginForm>
username:<br>
<input type="text" name="username" id = "username" value="Mickey">
<br>
password:<br>
<input type="text" name="password" id = "password" value="Mouse">
<br><br>
<input type = "button" id ="p" value="Submit">
</form>
</body>

<script type="text/javascript">
$(document).ready(function(){
      $("#p").click(function(){     


          $("#loginForm").ajaxSubmit({
              success : function(data) {
                  console.log(data);
                  if(data.flag){
                  $.cookie('userToken', data.token); 
                  $.cookie('username',$("#username").val());
                  $.cookie('password',$("#password").val());
                    }
                  else alert("帳號密碼錯誤");
                  }
      });


});
});   


</script>

</html>

而後固然是這個頁面的處理方法

package controller;

import java.util.HashMap;
import java.util.Map;

import util.SecurityUitl;

import com.jfinal.core.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 com.jfinal.config.Interceptors;
import com.jfinal.core.Controller;
import com.jfinal.render.Render;

import util.SecurityUitl;

public class AuthInterceptor implements Interceptor{

    private String[] interceptList = {"/login.jsp","/token/signIn"};

    @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){

            if(invocation.getActionKey().equals(interceptList[i])) flag = false;

        }

        if(flag){

        Controller controller = invocation.getController();
        //controller.setSessionAttr("flag", true);
        //Boolean loginUser = controller.getSessionAttr("flag");
        System.out.println("getUserController:"+controller.getCookie("userToken"));
        Map a = new HashMap();
        a.put("username", controller.getCookie("username"));
        a.put("miyao", "111111");

        if(controller.getCookie("userToken").equals(SecurityUitl.authentication(a))){

            System.out.println("token驗證成功,進入主頁");
            invocation.invoke();
        }
        else{
            System.out.println("跳轉到登錄頁面");
            controller.redirect("/login.jsp");
        }
    }
        else invocation.invoke();

    }
}

而後寫一個簡單的index頁來測試一下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src ="js/jquery-1.8.3.min.js"type="text/javascript"></script>
<script src ="js/jquery.cookie.js"type="text/javascript"></script>
</head>
<body>
我是主頁
</body>
<script type="text/javascript">
alert($.cookie("userToken"));



</script>
</html>

項目下載地址:http://download.csdn.net/detail/a8250852/9848448

相關文章
相關標籤/搜索