国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

JWT 和 JJWT,別再傻傻分不清了!

共 10196字,需瀏覽 21分鐘

 ·

2021-10-21 08:51

點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)

jwt是什么?

JWTs是JSON對(duì)象的編碼表示。JSON對(duì)象由零或多個(gè)名稱/值對(duì)組成,其中名稱為字符串,值為任意JSON值。

JWT有助于在clear(例如在URL中)發(fā)送這樣的信息,可以被信任為不可讀(即加密的)、不可修改的(即簽名)和URL - safe(即Base64編碼的)。

jwt的組成

  • Header: 標(biāo)題包含了令牌的元數(shù)據(jù),并且在最小包含簽名和/或加密算法的類型
  • Claims: Claims包含您想要簽署的任何信息
  • JSON Web Signature (JWS): 在header中指定的使用該算法的數(shù)字簽名和聲明

例如:

Header:

{
??"alg":?"HS256",
??"typ":?"JWT"
}

Claims:

{
??"sub":?"1234567890",
??"name":?"John?Doe",
??"admin":?true
}

Signature:

base64UrlEncode(Header)?+?"."?+?base64UrlEncode(Claims),

加密生成的token:

如何保證 JWT 安全

有很多庫(kù)可以幫助您創(chuàng)建和驗(yàn)證JWT,但是當(dāng)使用JWT時(shí),仍然可以做一些事情來(lái)限制您的安全風(fēng)險(xiǎn)。在您信任JWT中的任何信息之前,請(qǐng)始終驗(yàn)證簽名。這應(yīng)該是給定的。

換句話說(shuō),如果您正在傳遞一個(gè)秘密簽名密鑰到驗(yàn)證簽名的方法,并且簽名算法被設(shè)置為“none”,那么它應(yīng)該失敗驗(yàn)證。

確保簽名的秘密簽名,用于計(jì)算和驗(yàn)證簽名。秘密簽名密鑰只能由發(fā)行者和消費(fèi)者訪問(wèn),不能在這兩方之外訪問(wèn)。

不要在JWT中包含任何敏感數(shù)據(jù)。這些令牌通常是用來(lái)防止操作(未加密)的,因此索賠中的數(shù)據(jù)可以很容易地解碼和讀取。

如果您擔(dān)心重播攻擊,包括一個(gè)nonce(jti索賠)、過(guò)期時(shí)間(exp索賠)和創(chuàng)建時(shí)間(iat索賠)。這些在JWT規(guī)范中定義得很好。

jwt的框架:JJWT

JJWT是一個(gè)提供端到端的JWT創(chuàng)建和驗(yàn)證的Java庫(kù)。永遠(yuǎn)免費(fèi)和開(kāi)源(Apache License,版本2.0),JJWT很容易使用和理解。它被設(shè)計(jì)成一個(gè)以建筑為中心的流暢界面,隱藏了它的大部分復(fù)雜性。

規(guī)范兼容:

這里以github上的demo演示,理解原理,集成到自己項(xiàng)目中即可。Spring Boot 基礎(chǔ)就不介紹了,推薦下這個(gè)實(shí)戰(zhàn)教程:https://www.javastack.cn/categories/Spring-Boot/

應(yīng)用采用 spring boot + angular + jwt

結(jié)構(gòu)圖

????4.0.0????com.nibado.example????jwt-angular-spring????0.0.2-SNAPSHOT????????????1.8????????1.8????????2.4????????0.6.0????????4.12????????1.5.3.RELEASE????????????????????????????????????????????org.springframework.boot????????????????spring-boot-maven-plugin????????????????${spring.boot.version}????????????????????????????????????????????????????????????????????????????????????????repackage????????????????????????????????????????????????????????????????????????????????????????????????????????????org.springframework.boot????????????spring-boot-starter-web????????????${spring.boot.version}????????????????????????????commons-io????????????commons-io????????????${commons.io.version}????????????????????????????io.jsonwebtoken????????????jjwt????????????${jjwt.version}????????????????????????????junit????????????junit????????????${junit.version}????????????WebApplication.java" data-itemshowtype="0" tab="innerlink" style="color: rgb(58, 58, 58);" data-linktype="2">Maven 引進(jìn) : pom.xml

????4.0.0????com.nibado.example????jwt-angular-spring????0.0.2-SNAPSHOT????????????1.8????????1.8????????2.4????????0.6.0????????4.12????????1.5.3.RELEASE????????????????????????????????????????????org.springframework.boot????????????????spring-boot-maven-plugin????????????????${spring.boot.version}????????????????????????????????????????????????????????????????????????????????????????repackage????????????????????????????????????????????????????????????????????????????????????????????????????????????org.springframework.boot????????????spring-boot-starter-web????????????${spring.boot.version}????????????????????????????commons-io????????????commons-io????????????${commons.io.version}????????????????????????????io.jsonwebtoken????????????jjwt????????????${jjwt.version}????????????????????????????junit????????????junit????????????${junit.version}????????????WebApplication.java" data-itemshowtype="0" tab="innerlink" data-linktype="2">"http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/xsd/maven-4.0.0.xsd">
????4.0.0
????com.nibado.example
????jwt-angular-spring
????0.0.2-SNAPSHOT
????
????????1.8
????????1.8

????????2.4
????????0.6.0
????????4.12
????????1.5.3.RELEASE
????


????
????????
????????????
????????????????org.springframework.boot
????????????????spring-boot-maven-plugin
????????????????${spring.boot.version}
????????????????
????????????????????
????????????????????????
????????????????????????????repackage
????????????????????????

????????????????????

????????????????

????????????

????????

????


????
????????
????????????org.springframework.boot
????????????spring-boot-starter-web
????????????${spring.boot.version}
????????

????????
????????????commons-io
????????????commons-io
????????????${commons.io.version}
????????

????????
????????????io.jsonwebtoken
????????????jjwt
????????????${jjwt.version}
????????

????????
????????????junit
????????????junit
????????????${junit.version}
????????

????


????4.0.0????com.nibado.example????jwt-angular-spring????0.0.2-SNAPSHOT????????????1.8????????1.8????????2.4????????0.6.0????????4.12????????1.5.3.RELEASE????????????????????????????????????????????org.springframework.boot????????????????spring-boot-maven-plugin????????????????${spring.boot.version}????????????????????????????????????????????????????????????????????????????????????????repackage????????????????????????????????????????????????????????????????????????????????????????????????????????????org.springframework.boot????????????spring-boot-starter-web????????????${spring.boot.version}????????????????????????????commons-io????????????commons-io????????????${commons.io.version}????????????????????????????io.jsonwebtoken????????????jjwt????????????${jjwt.version}????????????????????????????junit????????????junit????????????${junit.version}????????????WebApplication.java" data-itemshowtype="0" tab="innerlink" style="color: rgb(58, 58, 58);" data-linktype="2">WebApplication.java

package?com.nibado.example.jwtangspr;

import?org.springframework.boot.SpringApplication;
import?org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import?org.springframework.boot.web.servlet.FilterRegistrationBean;
import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.ComponentScan;
import?org.springframework.context.annotation.Configuration;

@EnableAutoConfiguration
@ComponentScan
@Configuration
public?class?WebApplication?{
?
????//過(guò)濾器
????@Bean
????public?FilterRegistrationBean?jwtFilter()?{
????????final?FilterRegistrationBean?registrationBean?=?new?FilterRegistrationBean();
????????registrationBean.setFilter(new?JwtFilter());
????????registrationBean.addUrlPatterns("/api/*");
????????return?registrationBean;
????}

????public?static?void?main(final?String[]?args)?throws?Exception?{
????????SpringApplication.run(WebApplication.class,?args);
????}

}
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)

>?userDb?=?new?HashMap<>();????@SuppressWarnings("unused")????private?static?class?UserLogin?{????????public?String?name;????????public?String?password;????}????????public?UserController()?{????????userDb.put("tom",?Arrays.asList("user"));????????userDb.put("wen",?Arrays.asList("user",?"admin"));????}????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/????????????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)????public?LoginResponse?login(@RequestBody?final?UserLogin?login)????????throws?ServletException?{????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{????????????throw?new?ServletException("Invalid?login");????????}????????????????//加密生成token????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());????}????@SuppressWarnings("unused")????private?static?class?LoginResponse?{????????public?String?token;????????public?LoginResponse(final?String?token)?{????????????this.token?=?token;????????}????}}ApiController.javapackage?com.nibado.example.jwtangspr;import?io.jsonwebtoken.Claims;import?java.util.List;import?javax.servlet.ServletException;import?javax.servlet.http.HttpServletRequest;import?org.springframework.web.bind.annotation.PathVariable;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public?class?ApiController?{?@SuppressWarnings("unchecked")?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)?public?Boolean?login(@PathVariable?final?String?role,???final?HttpServletRequest?request)?throws?ServletException?{??final?Claims?claims?=?(Claims)?request.getAttribute("claims");??return?((List)?claims.get("roles")).contains(role);?}}index.html????????????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example?????????????????????????????

{{greeting}}

???Please?log?in?(tom?and?sally?are?valid?names)
?????Username:????
???????Error:???{{error.data.message}}?
???????????

Success!?Welcome?{{userName}}

?????(logout)
???
?????????{{userName}}?is?a
??
?????User??????????Admin???????????Foo???????????????app.jsvar?appModule?=?angular.module('myApp',?[]);appModule.controller('MainCtrl',?['mainService','$scope','$http',????????function(mainService,?$scope,?$http)?{????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';????????????$scope.token?=?null;????????????$scope.error?=?null;????????????$scope.roleUser?=?false;????????????$scope.roleAdmin?=?false;????????????$scope.roleFoo?=?false;????????????$scope.login?=?function()?{????????????????$scope.error?=?null;????????????????mainService.login($scope.userName).then(function(token)?{????????????????????$scope.token?=?token;????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;????????????????????$scope.checkRoles();????????????????},????????????????function(error){????????????????????$scope.error?=?error????????????????????$scope.userName?=?'';????????????????});????????????}????????????$scope.checkRoles?=?function()?{????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});????????????}????????????$scope.logout?=?function()?{????????????????$scope.userName?=?'';????????????????$scope.token?=?null;????????????????$http.defaults.headers.common.Authorization?=?'';????????????}????????????$scope.loggedIn?=?function()?{????????????????return?$scope.token?!==?null;????????????}????????}?]);appModule.service('mainService',?function($http)?{????return?{????????login?:?function(username)?{????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{????????????????return?response.data.token;????????????});????????},????????hasRole?:?function(role)?{????????????return?$http.get('/api/role/'?+?role).then(function(response){????????????????console.log(response);????????????????return?response.data;????????????});????????}????};});運(yùn)行應(yīng)用" data-itemshowtype="0" tab="innerlink" data-linktype="2">JwtFilter.java

>?userDb?=?new?HashMap<>();????@SuppressWarnings("unused")????private?static?class?UserLogin?{????????public?String?name;????????public?String?password;????}????????public?UserController()?{????????userDb.put("tom",?Arrays.asList("user"));????????userDb.put("wen",?Arrays.asList("user",?"admin"));????}????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/????????????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)????public?LoginResponse?login(@RequestBody?final?UserLogin?login)????????throws?ServletException?{????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{????????????throw?new?ServletException("Invalid?login");????????}????????????????//加密生成token????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());????}????@SuppressWarnings("unused")????private?static?class?LoginResponse?{????????public?String?token;????????public?LoginResponse(final?String?token)?{????????????this.token?=?token;????????}????}}ApiController.javapackage?com.nibado.example.jwtangspr;import?io.jsonwebtoken.Claims;import?java.util.List;import?javax.servlet.ServletException;import?javax.servlet.http.HttpServletRequest;import?org.springframework.web.bind.annotation.PathVariable;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public?class?ApiController?{?@SuppressWarnings("unchecked")?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)?public?Boolean?login(@PathVariable?final?String?role,???final?HttpServletRequest?request)?throws?ServletException?{??final?Claims?claims?=?(Claims)?request.getAttribute("claims");??return?((List)?claims.get("roles")).contains(role);?}}index.html????????????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example?????????????????????????????

{{greeting}}

???Please?log?in?(tom?and?sally?are?valid?names)
?????Username:???????????Error:???{{error.data.message}}????????????

Success!?Welcome?{{userName}}

?????(logout)
????????????{{userName}}?is?a???????User??????????Admin???????????Foo???????????????app.jsvar?appModule?=?angular.module('myApp',?[]);appModule.controller('MainCtrl',?['mainService','$scope','$http',????????function(mainService,?$scope,?$http)?{????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';????????????$scope.token?=?null;????????????$scope.error?=?null;????????????$scope.roleUser?=?false;????????????$scope.roleAdmin?=?false;????????????$scope.roleFoo?=?false;????????????$scope.login?=?function()?{????????????????$scope.error?=?null;????????????????mainService.login($scope.userName).then(function(token)?{????????????????????$scope.token?=?token;????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;????????????????????$scope.checkRoles();????????????????},????????????????function(error){????????????????????$scope.error?=?error????????????????????$scope.userName?=?'';????????????????});????????????}????????????$scope.checkRoles?=?function()?{????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});????????????}????????????$scope.logout?=?function()?{????????????????$scope.userName?=?'';????????????????$scope.token?=?null;????????????????$http.defaults.headers.common.Authorization?=?'';????????????}????????????$scope.loggedIn?=?function()?{????????????????return?$scope.token?!==?null;????????????}????????}?]);appModule.service('mainService',?function($http)?{????return?{????????login?:?function(username)?{????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{????????????????return?response.data.token;????????????});????????},????????hasRole?:?function(role)?{????????????return?$http.get('/api/role/'?+?role).then(function(response){????????????????console.log(response);????????????????return?response.data;????????????});????????}????};});運(yùn)行應(yīng)用" data-itemshowtype="0" tab="innerlink" data-linktype="2">package?com.nibado.example.jwtangspr;

import?java.io.IOException;

import?javax.servlet.FilterChain;
import?javax.servlet.ServletException;
import?javax.servlet.ServletRequest;
import?javax.servlet.ServletResponse;
import?javax.servlet.http.HttpServletRequest;

import?org.springframework.web.filter.GenericFilterBean;

import?io.jsonwebtoken.Claims;
import?io.jsonwebtoken.Jwts;
import?io.jsonwebtoken.SignatureException;

public?class?JwtFilter?extends?GenericFilterBean?{

????@Override
????public?void?doFilter(final?ServletRequest?req,
?????????????????????????final?ServletResponse?res,
?????????????????????????final?FilterChain?chain)?throws?IOException,?ServletException?{
????????final?HttpServletRequest?request?=?(HttpServletRequest)?req;

????????//客戶端將token封裝在請(qǐng)求頭中,格式為(Bearer后加空格):Authorization:Bearer +token
????????final?String?authHeader?=?request.getHeader("Authorization");
????????if?(authHeader?==?null?||?!authHeader.startsWith("Bearer?"))?{
????????????throw?new?ServletException("Missing?or?invalid?Authorization?header.");
????????}

????????//去除Bearer?后部分
????????final?String?token?=?authHeader.substring(7);

????????try?{
?????????//解密token,拿到里面的對(duì)象claims
????????????final?Claims?claims?=?Jwts.parser().setSigningKey("secretkey")
????????????????.parseClaimsJws(token).getBody();
????????????//將對(duì)象傳遞給下一個(gè)請(qǐng)求
????????????request.setAttribute("claims",?claims);
????????}
????????catch?(final?SignatureException?e)?{
????????????throw?new?ServletException("Invalid?token.");
????????}

????????chain.doFilter(req,?res);
????}

}

>?userDb?=?new?HashMap<>();????@SuppressWarnings("unused")????private?static?class?UserLogin?{????????public?String?name;????????public?String?password;????}????????public?UserController()?{????????userDb.put("tom",?Arrays.asList("user"));????????userDb.put("wen",?Arrays.asList("user",?"admin"));????}????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/????????????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)????public?LoginResponse?login(@RequestBody?final?UserLogin?login)????????throws?ServletException?{????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{????????????throw?new?ServletException("Invalid?login");????????}????????????????//加密生成token????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());????}????@SuppressWarnings("unused")????private?static?class?LoginResponse?{????????public?String?token;????????public?LoginResponse(final?String?token)?{????????????this.token?=?token;????????}????}}ApiController.javapackage?com.nibado.example.jwtangspr;import?io.jsonwebtoken.Claims;import?java.util.List;import?javax.servlet.ServletException;import?javax.servlet.http.HttpServletRequest;import?org.springframework.web.bind.annotation.PathVariable;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public?class?ApiController?{?@SuppressWarnings("unchecked")?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)?public?Boolean?login(@PathVariable?final?String?role,???final?HttpServletRequest?request)?throws?ServletException?{??final?Claims?claims?=?(Claims)?request.getAttribute("claims");??return?((List)?claims.get("roles")).contains(role);?}}index.html????????????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example?????????????????????????????

{{greeting}}

???Please?log?in?(tom?and?sally?are?valid?names)
?????Username:???????????Error:???{{error.data.message}}????????????

Success!?Welcome?{{userName}}

?????(logout)
????????????{{userName}}?is?a???????User??????????Admin???????????Foo???????????????app.jsvar?appModule?=?angular.module('myApp',?[]);appModule.controller('MainCtrl',?['mainService','$scope','$http',????????function(mainService,?$scope,?$http)?{????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';????????????$scope.token?=?null;????????????$scope.error?=?null;????????????$scope.roleUser?=?false;????????????$scope.roleAdmin?=?false;????????????$scope.roleFoo?=?false;????????????$scope.login?=?function()?{????????????????$scope.error?=?null;????????????????mainService.login($scope.userName).then(function(token)?{????????????????????$scope.token?=?token;????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;????????????????????$scope.checkRoles();????????????????},????????????????function(error){????????????????????$scope.error?=?error????????????????????$scope.userName?=?'';????????????????});????????????}????????????$scope.checkRoles?=?function()?{????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});????????????}????????????$scope.logout?=?function()?{????????????????$scope.userName?=?'';????????????????$scope.token?=?null;????????????????$http.defaults.headers.common.Authorization?=?'';????????????}????????????$scope.loggedIn?=?function()?{????????????????return?$scope.token?!==?null;????????????}????????}?]);appModule.service('mainService',?function($http)?{????return?{????????login?:?function(username)?{????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{????????????????return?response.data.token;????????????});????????},????????hasRole?:?function(role)?{????????????return?$http.get('/api/role/'?+?role).then(function(response){????????????????console.log(response);????????????????return?response.data;????????????});????????}????};});運(yùn)行應(yīng)用" data-itemshowtype="0" tab="innerlink" style="color: rgb(58, 58, 58);" data-linktype="2">UserController.java

>?userDb?=?new?HashMap<>();????@SuppressWarnings("unused")????private?static?class?UserLogin?{????????public?String?name;????????public?String?password;????}????????public?UserController()?{????????userDb.put("tom",?Arrays.asList("user"));????????userDb.put("wen",?Arrays.asList("user",?"admin"));????}????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/????????????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)????public?LoginResponse?login(@RequestBody?final?UserLogin?login)????????throws?ServletException?{????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{????????????throw?new?ServletException("Invalid?login");????????}????????????????//加密生成token????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());????}????@SuppressWarnings("unused")????private?static?class?LoginResponse?{????????public?String?token;????????public?LoginResponse(final?String?token)?{????????????this.token?=?token;????????}????}}ApiController.javapackage?com.nibado.example.jwtangspr;import?io.jsonwebtoken.Claims;import?java.util.List;import?javax.servlet.ServletException;import?javax.servlet.http.HttpServletRequest;import?org.springframework.web.bind.annotation.PathVariable;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public?class?ApiController?{?@SuppressWarnings("unchecked")?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)?public?Boolean?login(@PathVariable?final?String?role,???final?HttpServletRequest?request)?throws?ServletException?{??final?Claims?claims?=?(Claims)?request.getAttribute("claims");??return?((List)?claims.get("roles")).contains(role);?}}index.html????????????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example?????????????????????????????

{{greeting}}

???Please?log?in?(tom?and?sally?are?valid?names)
?????Username:???????????Error:???{{error.data.message}}????????????

Success!?Welcome?{{userName}}

?????(logout)
????????????{{userName}}?is?a???????User??????????Admin???????????Foo???????????????app.jsvar?appModule?=?angular.module('myApp',?[]);appModule.controller('MainCtrl',?['mainService','$scope','$http',????????function(mainService,?$scope,?$http)?{????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';????????????$scope.token?=?null;????????????$scope.error?=?null;????????????$scope.roleUser?=?false;????????????$scope.roleAdmin?=?false;????????????$scope.roleFoo?=?false;????????????$scope.login?=?function()?{????????????????$scope.error?=?null;????????????????mainService.login($scope.userName).then(function(token)?{????????????????????$scope.token?=?token;????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;????????????????????$scope.checkRoles();????????????????},????????????????function(error){????????????????????$scope.error?=?error????????????????????$scope.userName?=?'';????????????????});????????????}????????????$scope.checkRoles?=?function()?{????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});????????????}????????????$scope.logout?=?function()?{????????????????$scope.userName?=?'';????????????????$scope.token?=?null;????????????????$http.defaults.headers.common.Authorization?=?'';????????????}????????????$scope.loggedIn?=?function()?{????????????????return?$scope.token?!==?null;????????????}????????}?]);appModule.service('mainService',?function($http)?{????return?{????????login?:?function(username)?{????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{????????????????return?response.data.token;????????????});????????},????????hasRole?:?function(role)?{????????????return?$http.get('/api/role/'?+?role).then(function(response){????????????????console.log(response);????????????????return?response.data;????????????});????????}????};});運(yùn)行應(yīng)用" data-itemshowtype="0" tab="innerlink" data-linktype="2">package?com.nibado.example.jwtangspr;

import?java.util.Arrays;
import?java.util.Date;
import?java.util.HashMap;
import?java.util.List;
import?java.util.Map;

import?javax.servlet.ServletException;

import?org.springframework.web.bind.annotation.RequestBody;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RequestMethod;
import?org.springframework.web.bind.annotation.RestController;

import?io.jsonwebtoken.Jwts;
import?io.jsonwebtoken.SignatureAlgorithm;

@RestController
@RequestMapping("/user")
public?class?UserController?{

?//這里模擬數(shù)據(jù)庫(kù)
????private?final?Map>?userDb?=?new?HashMap<>();

????@SuppressWarnings("unused")
????private?static?class?UserLogin?{
????????public?String?name;
????????public?String?password;
????}
????
????public?UserController()?{
????????userDb.put("tom",?Arrays.asList("user"));
????????userDb.put("wen",?Arrays.asList("user",?"admin"));
????}
????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/
????
????
????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)
????public?LoginResponse?login(@RequestBody?final?UserLogin?login)
????????throws?ServletException?{
????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{
????????????throw?new?ServletException("Invalid?login");
????????}
????????
????????//加密生成token
????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)
????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())
????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());
????}

????@SuppressWarnings("unused")
????private?static?class?LoginResponse?{
????????public?String?token;

????????public?LoginResponse(final?String?token)?{
????????????this.token?=?token;
????????}
????}
}

>?userDb?=?new?HashMap<>();????@SuppressWarnings("unused")????private?static?class?UserLogin?{????????public?String?name;????????public?String?password;????}????????public?UserController()?{????????userDb.put("tom",?Arrays.asList("user"));????????userDb.put("wen",?Arrays.asList("user",?"admin"));????}????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/????????????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)????public?LoginResponse?login(@RequestBody?final?UserLogin?login)????????throws?ServletException?{????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{????????????throw?new?ServletException("Invalid?login");????????}????????????????//加密生成token????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());????}????@SuppressWarnings("unused")????private?static?class?LoginResponse?{????????public?String?token;????????public?LoginResponse(final?String?token)?{????????????this.token?=?token;????????}????}}ApiController.javapackage?com.nibado.example.jwtangspr;import?io.jsonwebtoken.Claims;import?java.util.List;import?javax.servlet.ServletException;import?javax.servlet.http.HttpServletRequest;import?org.springframework.web.bind.annotation.PathVariable;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public?class?ApiController?{?@SuppressWarnings("unchecked")?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)?public?Boolean?login(@PathVariable?final?String?role,???final?HttpServletRequest?request)?throws?ServletException?{??final?Claims?claims?=?(Claims)?request.getAttribute("claims");??return?((List)?claims.get("roles")).contains(role);?}}index.html????????????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example?????????????????????????????

{{greeting}}

???Please?log?in?(tom?and?sally?are?valid?names)
?????Username:???????????Error:???{{error.data.message}}????????????

Success!?Welcome?{{userName}}

?????(logout)
????????????{{userName}}?is?a???????User??????????Admin???????????Foo???????????????app.jsvar?appModule?=?angular.module('myApp',?[]);appModule.controller('MainCtrl',?['mainService','$scope','$http',????????function(mainService,?$scope,?$http)?{????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';????????????$scope.token?=?null;????????????$scope.error?=?null;????????????$scope.roleUser?=?false;????????????$scope.roleAdmin?=?false;????????????$scope.roleFoo?=?false;????????????$scope.login?=?function()?{????????????????$scope.error?=?null;????????????????mainService.login($scope.userName).then(function(token)?{????????????????????$scope.token?=?token;????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;????????????????????$scope.checkRoles();????????????????},????????????????function(error){????????????????????$scope.error?=?error????????????????????$scope.userName?=?'';????????????????});????????????}????????????$scope.checkRoles?=?function()?{????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});????????????}????????????$scope.logout?=?function()?{????????????????$scope.userName?=?'';????????????????$scope.token?=?null;????????????????$http.defaults.headers.common.Authorization?=?'';????????????}????????????$scope.loggedIn?=?function()?{????????????????return?$scope.token?!==?null;????????????}????????}?]);appModule.service('mainService',?function($http)?{????return?{????????login?:?function(username)?{????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{????????????????return?response.data.token;????????????});????????},????????hasRole?:?function(role)?{????????????return?$http.get('/api/role/'?+?role).then(function(response){????????????????console.log(response);????????????????return?response.data;????????????});????????}????};});運(yùn)行應(yīng)用" data-itemshowtype="0" tab="innerlink" style="color: rgb(58, 58, 58);" data-linktype="2">ApiController.java

>?userDb?=?new?HashMap<>();????@SuppressWarnings("unused")????private?static?class?UserLogin?{????????public?String?name;????????public?String?password;????}????????public?UserController()?{????????userDb.put("tom",?Arrays.asList("user"));????????userDb.put("wen",?Arrays.asList("user",?"admin"));????}????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/????????????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)????public?LoginResponse?login(@RequestBody?final?UserLogin?login)????????throws?ServletException?{????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{????????????throw?new?ServletException("Invalid?login");????????}????????????????//加密生成token????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());????}????@SuppressWarnings("unused")????private?static?class?LoginResponse?{????????public?String?token;????????public?LoginResponse(final?String?token)?{????????????this.token?=?token;????????}????}}ApiController.javapackage?com.nibado.example.jwtangspr;import?io.jsonwebtoken.Claims;import?java.util.List;import?javax.servlet.ServletException;import?javax.servlet.http.HttpServletRequest;import?org.springframework.web.bind.annotation.PathVariable;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public?class?ApiController?{?@SuppressWarnings("unchecked")?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)?public?Boolean?login(@PathVariable?final?String?role,???final?HttpServletRequest?request)?throws?ServletException?{??final?Claims?claims?=?(Claims)?request.getAttribute("claims");??return?((List)?claims.get("roles")).contains(role);?}}index.html????????????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example?????????????????????????????

{{greeting}}

???Please?log?in?(tom?and?sally?are?valid?names)
?????Username:???????????Error:???{{error.data.message}}????????????

Success!?Welcome?{{userName}}

?????(logout)
????????????{{userName}}?is?a???????User??????????Admin???????????Foo???????????????app.jsvar?appModule?=?angular.module('myApp',?[]);appModule.controller('MainCtrl',?['mainService','$scope','$http',????????function(mainService,?$scope,?$http)?{????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';????????????$scope.token?=?null;????????????$scope.error?=?null;????????????$scope.roleUser?=?false;????????????$scope.roleAdmin?=?false;????????????$scope.roleFoo?=?false;????????????$scope.login?=?function()?{????????????????$scope.error?=?null;????????????????mainService.login($scope.userName).then(function(token)?{????????????????????$scope.token?=?token;????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;????????????????????$scope.checkRoles();????????????????},????????????????function(error){????????????????????$scope.error?=?error????????????????????$scope.userName?=?'';????????????????});????????????}????????????$scope.checkRoles?=?function()?{????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});????????????}????????????$scope.logout?=?function()?{????????????????$scope.userName?=?'';????????????????$scope.token?=?null;????????????????$http.defaults.headers.common.Authorization?=?'';????????????}????????????$scope.loggedIn?=?function()?{????????????????return?$scope.token?!==?null;????????????}????????}?]);appModule.service('mainService',?function($http)?{????return?{????????login?:?function(username)?{????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{????????????????return?response.data.token;????????????});????????},????????hasRole?:?function(role)?{????????????return?$http.get('/api/role/'?+?role).then(function(response){????????????????console.log(response);????????????????return?response.data;????????????});????????}????};});運(yùn)行應(yīng)用" data-itemshowtype="0" tab="innerlink" data-linktype="2">package?com.nibado.example.jwtangspr;

import?io.jsonwebtoken.Claims;

import?java.util.List;

import?javax.servlet.ServletException;
import?javax.servlet.http.HttpServletRequest;

import?org.springframework.web.bind.annotation.PathVariable;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RequestMethod;
import?org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public?class?ApiController?{
?@SuppressWarnings("unchecked")
?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)
?public?Boolean?login(@PathVariable?final?String?role,
???final?HttpServletRequest?request)?throws?ServletException?{
??final?Claims?claims?=?(Claims)?request.getAttribute("claims");
??return?((List)?claims.get("roles")).contains(role);
?}
}

>?userDb?=?new?HashMap<>();????@SuppressWarnings("unused")????private?static?class?UserLogin?{????????public?String?name;????????public?String?password;????}????????public?UserController()?{????????userDb.put("tom",?Arrays.asList("user"));????????userDb.put("wen",?Arrays.asList("user",?"admin"));????}????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/????????????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)????public?LoginResponse?login(@RequestBody?final?UserLogin?login)????????throws?ServletException?{????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{????????????throw?new?ServletException("Invalid?login");????????}????????????????//加密生成token????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());????}????@SuppressWarnings("unused")????private?static?class?LoginResponse?{????????public?String?token;????????public?LoginResponse(final?String?token)?{????????????this.token?=?token;????????}????}}ApiController.javapackage?com.nibado.example.jwtangspr;import?io.jsonwebtoken.Claims;import?java.util.List;import?javax.servlet.ServletException;import?javax.servlet.http.HttpServletRequest;import?org.springframework.web.bind.annotation.PathVariable;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public?class?ApiController?{?@SuppressWarnings("unchecked")?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)?public?Boolean?login(@PathVariable?final?String?role,???final?HttpServletRequest?request)?throws?ServletException?{??final?Claims?claims?=?(Claims)?request.getAttribute("claims");??return?((List)?claims.get("roles")).contains(role);?}}index.html????????????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example?????????????????????????????

{{greeting}}

???Please?log?in?(tom?and?sally?are?valid?names)
?????Username:???????????Error:???{{error.data.message}}????????????

Success!?Welcome?{{userName}}

?????(logout)
????????????{{userName}}?is?a???????User??????????Admin???????????Foo???????????????app.jsvar?appModule?=?angular.module('myApp',?[]);appModule.controller('MainCtrl',?['mainService','$scope','$http',????????function(mainService,?$scope,?$http)?{????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';????????????$scope.token?=?null;????????????$scope.error?=?null;????????????$scope.roleUser?=?false;????????????$scope.roleAdmin?=?false;????????????$scope.roleFoo?=?false;????????????$scope.login?=?function()?{????????????????$scope.error?=?null;????????????????mainService.login($scope.userName).then(function(token)?{????????????????????$scope.token?=?token;????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;????????????????????$scope.checkRoles();????????????????},????????????????function(error){????????????????????$scope.error?=?error????????????????????$scope.userName?=?'';????????????????});????????????}????????????$scope.checkRoles?=?function()?{????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});????????????}????????????$scope.logout?=?function()?{????????????????$scope.userName?=?'';????????????????$scope.token?=?null;????????????????$http.defaults.headers.common.Authorization?=?'';????????????}????????????$scope.loggedIn?=?function()?{????????????????return?$scope.token?!==?null;????????????}????????}?]);appModule.service('mainService',?function($http)?{????return?{????????login?:?function(username)?{????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{????????????????return?response.data.token;????????????});????????},????????hasRole?:?function(role)?{????????????return?$http.get('/api/role/'?+?role).then(function(response){????????????????console.log(response);????????????????return?response.data;????????????});????????}????};});運(yùn)行應(yīng)用" data-itemshowtype="0" tab="innerlink" style="color: rgb(58, 58, 58);" data-linktype="2">index.html

>?userDb?=?new?HashMap<>();????@SuppressWarnings("unused")????private?static?class?UserLogin?{????????public?String?name;????????public?String?password;????}????????public?UserController()?{????????userDb.put("tom",?Arrays.asList("user"));????????userDb.put("wen",?Arrays.asList("user",?"admin"));????}????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/????????????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)????public?LoginResponse?login(@RequestBody?final?UserLogin?login)????????throws?ServletException?{????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{????????????throw?new?ServletException("Invalid?login");????????}????????????????//加密生成token????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());????}????@SuppressWarnings("unused")????private?static?class?LoginResponse?{????????public?String?token;????????public?LoginResponse(final?String?token)?{????????????this.token?=?token;????????}????}}ApiController.javapackage?com.nibado.example.jwtangspr;import?io.jsonwebtoken.Claims;import?java.util.List;import?javax.servlet.ServletException;import?javax.servlet.http.HttpServletRequest;import?org.springframework.web.bind.annotation.PathVariable;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public?class?ApiController?{?@SuppressWarnings("unchecked")?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)?public?Boolean?login(@PathVariable?final?String?role,???final?HttpServletRequest?request)?throws?ServletException?{??final?Claims?claims?=?(Claims)?request.getAttribute("claims");??return?((List)?claims.get("roles")).contains(role);?}}index.html????????????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example?????????????????????????????

{{greeting}}

???Please?log?in?(tom?and?sally?are?valid?names)
?????Username:???????????Error:???{{error.data.message}}????????????

Success!?Welcome?{{userName}}

?????(logout)
????????????{{userName}}?is?a???????User??????????Admin???????????Foo???????????????app.jsvar?appModule?=?angular.module('myApp',?[]);appModule.controller('MainCtrl',?['mainService','$scope','$http',????????function(mainService,?$scope,?$http)?{????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';????????????$scope.token?=?null;????????????$scope.error?=?null;????????????$scope.roleUser?=?false;????????????$scope.roleAdmin?=?false;????????????$scope.roleFoo?=?false;????????????$scope.login?=?function()?{????????????????$scope.error?=?null;????????????????mainService.login($scope.userName).then(function(token)?{????????????????????$scope.token?=?token;????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;????????????????????$scope.checkRoles();????????????????},????????????????function(error){????????????????????$scope.error?=?error????????????????????$scope.userName?=?'';????????????????});????????????}????????????$scope.checkRoles?=?function()?{????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});????????????}????????????$scope.logout?=?function()?{????????????????$scope.userName?=?'';????????????????$scope.token?=?null;????????????????$http.defaults.headers.common.Authorization?=?'';????????????}????????????$scope.loggedIn?=?function()?{????????????????return?$scope.token?!==?null;????????????}????????}?]);appModule.service('mainService',?function($http)?{????return?{????????login?:?function(username)?{????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{????????????????return?response.data.token;????????????});????????},????????hasRole?:?function(role)?{????????????return?$http.get('/api/role/'?+?role).then(function(response){????????????????console.log(response);????????????????return?response.data;????????????});????????}????};});運(yùn)行應(yīng)用" data-itemshowtype="0" tab="innerlink" data-linktype="2">
"myApp">

????"utf-8"/>
????"X-UA-Compatible"?content="IE=edge,chrome=1"/>
????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example
????"description"?content="">
????"viewport"?content="width=device-width">
????"stylesheet"?href="libs/bootstrap/css/bootstrap.css">
????
????
????
????


"container"?ng-controller='MainCtrl'>
?

{{greeting}}


?"!loggedIn()">
??Please?log?in?(tom?and?sally?are?valid?names)

??"login()">
???Username:?type="text"?ng-model="userName"/>type="submit"?value="Login"/>
??
?
?"alert?alert-danger"?role="alert"?ng-show="error.data.message">
???"glyphicon?glyphicon-exclamation-sign"?aria-hidden="true">
???"sr-only">Error:
???{{error.data.message}}
??
?"loggedIn()">
??"row">
???"col-md-6">
????

"label?label-success">Success!?Welcome?{{userName}}


?????"logout()">(logout)
???
???"col-md-4">
???"row?header">
???"col-sm-4">{{userName}}?is?a
??
??"row">
???"col-sm-2">User
???"col-sm-2">"glyphicon?glyphicon-ok"?aria-hidden="true"?ng-show="roleUser">
??
??"row">
???"col-sm-2">Admin
???"col-sm-2">"glyphicon?glyphicon-ok"?aria-hidden="true"?ng-show="roleAdmin">
???
??"row">
???"col-sm-2">Foo
???"col-sm-2">"glyphicon?glyphicon-ok"?aria-hidden="true"?ng-show="roleFoo">
??????
???
??
?



>?userDb?=?new?HashMap<>();????@SuppressWarnings("unused")????private?static?class?UserLogin?{????????public?String?name;????????public?String?password;????}????????public?UserController()?{????????userDb.put("tom",?Arrays.asList("user"));????????userDb.put("wen",?Arrays.asList("user",?"admin"));????}????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/????????????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)????public?LoginResponse?login(@RequestBody?final?UserLogin?login)????????throws?ServletException?{????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{????????????throw?new?ServletException("Invalid?login");????????}????????????????//加密生成token????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());????}????@SuppressWarnings("unused")????private?static?class?LoginResponse?{????????public?String?token;????????public?LoginResponse(final?String?token)?{????????????this.token?=?token;????????}????}}ApiController.javapackage?com.nibado.example.jwtangspr;import?io.jsonwebtoken.Claims;import?java.util.List;import?javax.servlet.ServletException;import?javax.servlet.http.HttpServletRequest;import?org.springframework.web.bind.annotation.PathVariable;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public?class?ApiController?{?@SuppressWarnings("unchecked")?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)?public?Boolean?login(@PathVariable?final?String?role,???final?HttpServletRequest?request)?throws?ServletException?{??final?Claims?claims?=?(Claims)?request.getAttribute("claims");??return?((List)?claims.get("roles")).contains(role);?}}index.html????????????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example?????????????????????????????

{{greeting}}

???Please?log?in?(tom?and?sally?are?valid?names)
?????Username:???????????Error:???{{error.data.message}}????????????

Success!?Welcome?{{userName}}

?????(logout)
????????????{{userName}}?is?a???????User??????????Admin???????????Foo???????????????app.jsvar?appModule?=?angular.module('myApp',?[]);appModule.controller('MainCtrl',?['mainService','$scope','$http',????????function(mainService,?$scope,?$http)?{????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';????????????$scope.token?=?null;????????????$scope.error?=?null;????????????$scope.roleUser?=?false;????????????$scope.roleAdmin?=?false;????????????$scope.roleFoo?=?false;????????????$scope.login?=?function()?{????????????????$scope.error?=?null;????????????????mainService.login($scope.userName).then(function(token)?{????????????????????$scope.token?=?token;????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;????????????????????$scope.checkRoles();????????????????},????????????????function(error){????????????????????$scope.error?=?error????????????????????$scope.userName?=?'';????????????????});????????????}????????????$scope.checkRoles?=?function()?{????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});????????????}????????????$scope.logout?=?function()?{????????????????$scope.userName?=?'';????????????????$scope.token?=?null;????????????????$http.defaults.headers.common.Authorization?=?'';????????????}????????????$scope.loggedIn?=?function()?{????????????????return?$scope.token?!==?null;????????????}????????}?]);appModule.service('mainService',?function($http)?{????return?{????????login?:?function(username)?{????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{????????????????return?response.data.token;????????????});????????},????????hasRole?:?function(role)?{????????????return?$http.get('/api/role/'?+?role).then(function(response){????????????????console.log(response);????????????????return?response.data;????????????});????????}????};});運(yùn)行應(yīng)用" data-itemshowtype="0" tab="innerlink" style="color: rgb(58, 58, 58);" data-linktype="2">app.js

>?userDb?=?new?HashMap<>();????@SuppressWarnings("unused")????private?static?class?UserLogin?{????????public?String?name;????????public?String?password;????}????????public?UserController()?{????????userDb.put("tom",?Arrays.asList("user"));????????userDb.put("wen",?Arrays.asList("user",?"admin"));????}????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/????????????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)????public?LoginResponse?login(@RequestBody?final?UserLogin?login)????????throws?ServletException?{????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{????????????throw?new?ServletException("Invalid?login");????????}????????????????//加密生成token????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());????}????@SuppressWarnings("unused")????private?static?class?LoginResponse?{????????public?String?token;????????public?LoginResponse(final?String?token)?{????????????this.token?=?token;????????}????}}ApiController.javapackage?com.nibado.example.jwtangspr;import?io.jsonwebtoken.Claims;import?java.util.List;import?javax.servlet.ServletException;import?javax.servlet.http.HttpServletRequest;import?org.springframework.web.bind.annotation.PathVariable;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public?class?ApiController?{?@SuppressWarnings("unchecked")?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)?public?Boolean?login(@PathVariable?final?String?role,???final?HttpServletRequest?request)?throws?ServletException?{??final?Claims?claims?=?(Claims)?request.getAttribute("claims");??return?((List)?claims.get("roles")).contains(role);?}}index.html????????????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example?????????????????????????????

{{greeting}}

???Please?log?in?(tom?and?sally?are?valid?names)
?????Username:???????????Error:???{{error.data.message}}????????????

Success!?Welcome?{{userName}}

?????(logout)
????????????{{userName}}?is?a???????User??????????Admin???????????Foo???????????????app.jsvar?appModule?=?angular.module('myApp',?[]);appModule.controller('MainCtrl',?['mainService','$scope','$http',????????function(mainService,?$scope,?$http)?{????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';????????????$scope.token?=?null;????????????$scope.error?=?null;????????????$scope.roleUser?=?false;????????????$scope.roleAdmin?=?false;????????????$scope.roleFoo?=?false;????????????$scope.login?=?function()?{????????????????$scope.error?=?null;????????????????mainService.login($scope.userName).then(function(token)?{????????????????????$scope.token?=?token;????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;????????????????????$scope.checkRoles();????????????????},????????????????function(error){????????????????????$scope.error?=?error????????????????????$scope.userName?=?'';????????????????});????????????}????????????$scope.checkRoles?=?function()?{????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});????????????}????????????$scope.logout?=?function()?{????????????????$scope.userName?=?'';????????????????$scope.token?=?null;????????????????$http.defaults.headers.common.Authorization?=?'';????????????}????????????$scope.loggedIn?=?function()?{????????????????return?$scope.token?!==?null;????????????}????????}?]);appModule.service('mainService',?function($http)?{????return?{????????login?:?function(username)?{????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{????????????????return?response.data.token;????????????});????????},????????hasRole?:?function(role)?{????????????return?$http.get('/api/role/'?+?role).then(function(response){????????????????console.log(response);????????????????return?response.data;????????????});????????}????};});運(yùn)行應(yīng)用" data-itemshowtype="0" tab="innerlink" data-linktype="2">var?appModule?=?angular.module('myApp',?[]);

appModule.controller('MainCtrl',?['mainService','$scope','$http',
????????function(mainService,?$scope,?$http)?{
????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';
????????????$scope.token?=?null;
????????????$scope.error?=?null;
????????????$scope.roleUser?=?false;
????????????$scope.roleAdmin?=?false;
????????????$scope.roleFoo?=?false;

????????????$scope.login?=?function()?{
????????????????$scope.error?=?null;
????????????????mainService.login($scope.userName).then(function(token)?{
????????????????????$scope.token?=?token;
????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;
????????????????????$scope.checkRoles();
????????????????},
????????????????function(error){
????????????????????$scope.error?=?error
????????????????????$scope.userName?=?'';
????????????????});
????????????}

????????????$scope.checkRoles?=?function()?{
????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});
????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});
????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});
????????????}

????????????$scope.logout?=?function()?{
????????????????$scope.userName?=?'';
????????????????$scope.token?=?null;
????????????????$http.defaults.headers.common.Authorization?=?'';
????????????}

????????????$scope.loggedIn?=?function()?{
????????????????return?$scope.token?!==?null;
????????????}
????????}?]);



appModule.service('mainService',?function($http)?{
????return?{
????????login?:?function(username)?{
????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{
????????????????return?response.data.token;
????????????});
????????},

????????hasRole?:?function(role)?{
????????????return?$http.get('/api/role/'?+?role).then(function(response){
????????????????console.log(response);
????????????????return?response.data;
????????????});
????????}
????};
});

>?userDb?=?new?HashMap<>();????@SuppressWarnings("unused")????private?static?class?UserLogin?{????????public?String?name;????????public?String?password;????}????????public?UserController()?{????????userDb.put("tom",?Arrays.asList("user"));????????userDb.put("wen",?Arrays.asList("user",?"admin"));????}????/*以上是模擬數(shù)據(jù)庫(kù),并往數(shù)據(jù)庫(kù)插入tom和sally兩條記錄*/????????????@RequestMapping(value?=?"login",?method?=?RequestMethod.POST)????public?LoginResponse?login(@RequestBody?final?UserLogin?login)????????throws?ServletException?{????????if?(login.name?==?null?||?!userDb.containsKey(login.name))?{????????????throw?new?ServletException("Invalid?login");????????}????????????????//加密生成token????????return?new?LoginResponse(Jwts.builder().setSubject(login.name)????????????.claim("roles",?userDb.get(login.name)).setIssuedAt(new?Date())????????????.signWith(SignatureAlgorithm.HS256,?"secretkey").compact());????}????@SuppressWarnings("unused")????private?static?class?LoginResponse?{????????public?String?token;????????public?LoginResponse(final?String?token)?{????????????this.token?=?token;????????}????}}ApiController.javapackage?com.nibado.example.jwtangspr;import?io.jsonwebtoken.Claims;import?java.util.List;import?javax.servlet.ServletException;import?javax.servlet.http.HttpServletRequest;import?org.springframework.web.bind.annotation.PathVariable;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public?class?ApiController?{?@SuppressWarnings("unchecked")?@RequestMapping(value?=?"role/{role}",?method?=?RequestMethod.GET)?public?Boolean?login(@PathVariable?final?String?role,???final?HttpServletRequest?request)?throws?ServletException?{??final?Claims?claims?=?(Claims)?request.getAttribute("claims");??return?((List)?claims.get("roles")).contains(role);?}}index.html????????????JSON?Web?Token?/?AngularJS?/?Spring?Boot?example?????????????????????????????

{{greeting}}

???Please?log?in?(tom?and?sally?are?valid?names)
?????Username:???????????Error:???{{error.data.message}}????????????

Success!?Welcome?{{userName}}

?????(logout)
????????????{{userName}}?is?a???????User??????????Admin???????????Foo???????????????app.jsvar?appModule?=?angular.module('myApp',?[]);appModule.controller('MainCtrl',?['mainService','$scope','$http',????????function(mainService,?$scope,?$http)?{????????????$scope.greeting?=?'Welcome?to?the?JSON?Web?Token?/?AngularJR?/?Spring?example!';????????????$scope.token?=?null;????????????$scope.error?=?null;????????????$scope.roleUser?=?false;????????????$scope.roleAdmin?=?false;????????????$scope.roleFoo?=?false;????????????$scope.login?=?function()?{????????????????$scope.error?=?null;????????????????mainService.login($scope.userName).then(function(token)?{????????????????????$scope.token?=?token;????????????????????$http.defaults.headers.common.Authorization?=?'Bearer?'?+?token;????????????????????$scope.checkRoles();????????????????},????????????????function(error){????????????????????$scope.error?=?error????????????????????$scope.userName?=?'';????????????????});????????????}????????????$scope.checkRoles?=?function()?{????????????????mainService.hasRole('user').then(function(user)?{$scope.roleUser?=?user});????????????????mainService.hasRole('admin').then(function(admin)?{$scope.roleAdmin?=?admin});????????????????mainService.hasRole('foo').then(function(foo)?{$scope.roleFoo?=?foo});????????????}????????????$scope.logout?=?function()?{????????????????$scope.userName?=?'';????????????????$scope.token?=?null;????????????????$http.defaults.headers.common.Authorization?=?'';????????????}????????????$scope.loggedIn?=?function()?{????????????????return?$scope.token?!==?null;????????????}????????}?]);appModule.service('mainService',?function($http)?{????return?{????????login?:?function(username)?{????????????return?$http.post('/user/login',?{name:?username}).then(function(response)?{????????????????return?response.data.token;????????????});????????},????????hasRole?:?function(role)?{????????????return?$http.get('/api/role/'?+?role).then(function(response){????????????????console.log(response);????????????????return?response.data;????????????});????????}????};});運(yùn)行應(yīng)用" data-itemshowtype="0" tab="innerlink" style="color: rgb(58, 58, 58);" data-linktype="2">運(yùn)行應(yīng)用

效果

原文鏈接:https://blog.csdn.net/change_on/article/details/76279441

版權(quán)聲明:本文為CSDN博主「J_小浩子」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。





關(guān)注Java技術(shù)棧看更多干貨



獲取 Spring Boot 實(shí)戰(zhàn)筆記!
瀏覽 22
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 成人免费一级视频| 亚洲专区在线播放| 99er在线观看| 久久精品99国产国产精| 亚洲国产精品一区二区三区| 玩弄小怮女在线观看| 欧美黑吊大战白妞欧美大片| 成人超碰| 丁香五月六月婷婷| 无码欧美成人AAAA三区在线| 亚洲毛片亚洲毛片亚洲毛片| 日逼无码视频| 亚洲无码黄色电影| 亚洲无码人妻| a片在线免费观看| 91探花视频精选在线播放| 日韩一级高清| 黄色电影中文字幕| 水蜜桃视频在线| 91麻豆视频在线观看| 动漫3D成人H无码国漫| 亚洲aaa在线| 欧美AAAAAA视频| 成人视频免费观看18| 在线观看的av| 成人免费在线观看| AV无码在线播放| 超碰成人网| 四川BBB搡BBB爽爽爽电影| 精品啪啪| 999在线视频| 91精品国产一区| 国产色黄视频| 特级毛片在线观看| 黑人AV| 538在线视频| 国产成人精品一区二三区熟女在线 | 日韩一区二区三区视频| 青青草无码| 欧美成人在线网站| 国产一级黄色录像| 婷婷五月综合在线| 亚洲视频免费在线播放| 极品美鮑20p| 成年免费视频| 国内精品内射| 91精品婷婷国产综合久久蝌蚪| 色中色av| 国产亚洲网| 东北女人毛多又黑A片| 波多野结衣高潮| 国产91一区在线精品| 国产男女性爱视频播放| 青青在线| 亚洲九九| 成人激情视频| 91视频一区| 操逼欧美| 久草资源在线| 91女人18毛片水多国产| 国产熟女视频| 麻豆91视频| 搡BBBB搡BBB搡五十| 白浆AV| 一本色道久久88加勒比| 久草视频观看| 在线中文无码| 日韩一级大片| 高清无码在线观看免费| 美女网站在线观看| 一区二区三区成人电影| 成人做爰黄AA片免费看三区 | 97久久人人| 久久久久久久成人| 成人毛片100免费观看| 久久一卡二卡| 91久久综合| 一区二区日本| 天天操天天操天天| 蜜芽AV在线| 91人妻最真实刺激绿帽| 91福利在线视频| 日韩色色网| 色天使视频| 蜜臀AV在线播放| 色骚综合| 欧美性高潮| 一二区免费视频| 国产一区二区免费| 69福利视频| 欧美激情片| 91黑人| 成年人视频在线免费观看| 久久黄色大片| 色网站在线观看| 大香蕉久久久久久| 国产一级片视频| 91网站免费看| 激情综合婷婷| AA无码| 国产做受91一片二片老头| 老熟女视频| 大香蕉综合在线| 亚洲无码在线免费观看| 国产一区二区三区18| 天堂在线视频| 日韩av三级在线观看| 欧美国产成人在线| 蜜桃精品久久久| 免费看三级网站| 亚洲无码一二三区| 亚洲av在线免费观看| 成人国产精品视频| 麻豆国产一区二区三区四区| 91豆花成人网站| 天天操夜夜撸| 免费在线看A| 开心五月色婷婷综合开心网| 骚小姨子无码| 国产三级视频| 高清无码在线观看免费| 亚洲AV偷拍| www.a片| 日本视频一区二区| 97国产资源| 中文字幕AV在线免费观看| 亚洲最新无码视频| 强波多野结衣黑人| 性爱无码| 麻豆国产一区二区三区四区| 国产精品美女久久久久久久久| 中文字幕中文字幕| 欧美老妇操逼视频| 亚洲影院第一页| 亚洲AV无码乱码精品| 一级a一级a免费观看视频Al明星| 国产综合一区二区| 日韩有码中文字幕在线观看| 青青操视频在线| jzzijzzij亚洲成熟少妇在线观看 九色蝌蚪9l视频蝌蚪9l视频成人熟妇 | 天堂视频在线观看亚洲美女 | 亚洲有码中文字幕| 午夜亚洲国产一区视频网站 | 久久久久久9| 伊人久久精品| 五月停亭六月,六月停亭的英语| 国产ts视频| v天堂在线观看| 在线乱视频| 婷婷亚洲精品| 日韩一级片免费观看| 91人人爱| 免费亲子乱婬一级A片| 天天爱夜夜操| 久久毛久久久j| 欧美日韩AV| 无码人妻中文| 色婷婷久久综合| 国产一级A| 日本精品在线| 中文字幕免费在线| 国产欧美一区二区三区视频| 日本少妇激情视频| 亚洲成人av在线播放| 在线色网站| 在线毛片网站| 99免费在线观看| 国产成人一区| 日本一本视频| 天堂在线v| 91无码人妻一区二区成人aⅴ| 久久99人妻无码精品一区| 91超碰在线免费观看| 成人无码精品| 亚洲无码黄色电影| 看A片在线| 欧美日韩在线视频免费观看| 午夜激情五月天| 亚洲无码在线免费观看视频| 国产精品黄色| 日韩精品无码av| 午夜在线无码| 怡春院久久| 日韩精品中文无码| 最新毛片网站| 日韩欧美一级视频| 草莓视频在线播放| 97天天干| 四季AV综合网站| 99香蕉视频| 99精品视频播放| 性性性性性XXXXX| 婬乱欧美一二三区| 人人爱人人操人人爽| 欧美级毛片高潮| 久99在线视频| 亚洲热视频在线观看| 久久只有精品| 国产精品一区二区三| 一区二区三区四区五区六区高清无吗视频 | 色婷婷AV一区二区三区软件| 巜人妻初尝按摩师BD中字| 色情一级A片成人片| 日韩AV电影网| 亚洲男人的天堂av| 久久综合伊人| 97超碰免费| 日韩一级无码毛片| 日韩在线网址| h片在线看| 东方成人AV| 中字无码AV| 狼友视频免费在线观看| 欧美夜夜骑| 天天干天天撸| 国产又大又粗又爽| 成人精品一区日本无码网站suv/| 自拍做爱视频| 久草小视频| 18sav| 久久精品人人| 欧美一级黄| 三级片在线看| 淫色综合| 亚洲午夜精品成人毛片| 午夜成人小电影| 日本无码在线| 日韩AⅤ无码一区二区三区| 夜夜操夜夜| 黄色日韩| 美女大吊,网站视频| av天堂中文| 亚洲成人无码在线播放| 亚洲图片欧美色图| 色老板在线精品免费观看| 狠狠色噜噜狠狠狠7777| 一区二区三区四区免费观看| 日韩欧美综合| 国产主播AV| 特级西西444www大精品| 大香蕉在线电影| 裸体黄色一极大片| 国外成人性视频免费| 一级色情片| 国产激情都市一区二区三区欧美| 国产成人片在线观看| 青草视频在线免费观看| 日韩Av无码一区二区三区不卡| 91在线无码精品秘软件| 男人的天堂免费视频| 久久波多野结衣| 毛片在线看片| 在线观看日韩视频| 久久国产性爱| 一本色道88久久加勒比精品| 逼逼爱| 蜜桃AV一区二区三区| 成人做爰100片免费-百度| 搡bbbb| 人妻碰碰| 人人妻人人澡人人爽久久con| 国产亚洲精品久久久波多野结衣| 日批视频在线观看| 成人黄色在线视频| 男女草比视频| 97自拍| 99热在线观看| 成人网站AV| 国产天堂网| 欧美日韩免费在线播放电影在线播放电影在线播放电影免费 | 无码三级午夜久久人妻| 免费播放婬乱男女婬视频国产| 爱搞逼综合网| 黄色视频A片| 国产成人精品av| 国产精品自拍视频| 99热精品免费| 国产黄色视频免费| 国产欧美日韩成人| 亚洲一区二区成人| 操逼无码视频| 亚洲图片中文字幕| 五月无码| 亚洲乱伦| 黄色视频日本免费| 亚洲精品在线观看视频| 伊人日日| 熟女天堂| 欧美偷拍| 欧美狠狠插| 影音先锋资源站| 先锋影音一区二区三区| 一级日逼视频| 国产一区二区av| 丝瓜污视频| 97精品在线视频| 大鸡吧成人视频| 97人妻人人澡人人爽人人| 女人天堂av| 国产黄色电影在线| 999国产精品| 中文字幕av高清片,中文在线观看| 这里只有精品视频在线| 人人干人人艹| 欧美黄片无码| 久久久久久久久国产精品| 青榴视频免费观看| 免费国产在线视频| 大香蕉人人| 国产精品色情A级毛片| 日本视频一区二区三区| 影音先锋中文字幕资源| 国产午夜成人免费看片无遮挡| 丝袜无码| 天天干,夜夜爽| 无码专区视频| 日皮视频在线观看免费| 欧美精产国品一区二区区别| 久久黄色免费看| 日日射天天干| 四虎网站| 欧美群交videotv群交| 激情综合五月天| 人人操97| 精品欧美一区二区精品久久| 久热在线资源福利站| 久久免费视频播放| 熟妇私拍| JULIA超乳JULIA无码| 色mm在线播放| 免费在线观看视频黄| 亚洲无码视频免费观看| 蜜桃人妻无码| 欧美性爱综合网| 激情小视频在线观看| 污污污www精品国产网站| www.91超碰在线| 国产精品国产精品国产专区不| 边吃奶边做爱| 亚洲无码高清一区| 午夜亚洲福利视频| 成人三级毛片| 91精品老司机| 青青操逼网| 色色色成人视频| 五月天激情小说网| 久久夜色精品噜噜亚洲AV| 亚洲伊人综合| 亚洲免费观看| 国产乱伦中文字幕| 天天视频色版免费观看视频 | 一区二区三区不卡在线| 特级西西444WWW大精品视频| 日本一级黄色| 果冻传媒A片一二三区| 狠狠干2025| 露脸丨91丨九色露脸| 日韩一区二区三区免费视频| 久久久久国产一区二区三区| 国产无码观看| 在线小视频| 中文字幕12页| 日本免费A片| 亚洲砖区区免费| 久久一级片| 午夜探花在线观看| 91麻豆大奶巨乳一区白虎| 蜜桃传媒av| 在线观看免费完整版中文字幕视频 | 亚洲精品秘一区二区三区影| 国产黄色免费| 熟女人妻在线| av在线资源| 少妇推油呻吟白浆啪啪成人片| 色色激情视频| 99亚洲视频| 欧美日韩精品一区二区三区| 嫩BBB槡BBBB槡BBBB撒尿 | 亚洲av性爱| 成人亚洲A片V一区二区三区蜜月 | 激情伊人五月天| 亚洲精品一区二区二区的游戏情况| 国产黄网站| 国产午夜91人妻| 波多野结衣无码高清视频| 免费a片观看| 91人妻人人人人爽| 国产精品免费一区二区三区四区视频 | 7777av| 亚洲热在线视频| 丰滿老婦BBwBBwBBw| 九九九九九九精品| 丁香婷婷色五月激情综合三级三级片欧美日韩国 | 日韩AV性爱| www国产精品| 免费福利视频网站| 国产一区在线视频| 久久9视频| 亚洲天堂在线视频| 人人看人人摸人人搞| 欧洲成人无码| 欧美精品三级| 国产精品理论片| 亚洲不卡视频| 天天艹夜夜| 毛片网站大全| 欧美视频中文字幕| 国产一级婬乱A片| 亚洲视频区| 国产第一精品| 大香蕉视频国产| 亚洲精品无码久久久| 日本在线观看www| 成人视频免费在线观看| 亚洲AV成人无码AV小说| 亚洲国产精品成人网站| 日韩国产中文字幕| 日韩精品一区二区三免费视频 | 91白丝喷水自慰网站| 超碰成人在线观看| 国产又粗又猛又爽又黄91精品 | 久久福利视频导航| 9l视频自拍九色9l视频成人 | 久热网站| 怡红院AV| 一级a免一级a做免费线看内祥| 狠狠躁婷婷天天爽综合| 极品人妻疯狂3p超刺激| 91影音先锋| 久久精彩偷拍视频| 18禁黄色免费网站| 午夜国产在线视频| 国产激情AV| 翔田千里AV| 亚洲在线观看网站| 国产成人AV片| 99在线视频免费| 高清无码片| 亚州毛片| 欧美成人大片| 欧美A一| 怡红院男人天堂| 东京热一区二区三区四区| 四虎Av| 加勒比无码| 中文无码一区二区三区四区| 肏少妇女情人大骚逼直播一区二区| 丁香五月大香蕉| 日韩亚洲在线视频| 国产精品久久久久久久久久| 丁香婷婷五月色成人网站| 久草视频在线免费播放| 一级片在线播放| 91性爱网| 中国美女一级黄片| 国产男女性爱视频播放| 狠狠躁夜夜躁人爽| 色哟哟一中文字慕| 91丨九色丨蝌蚪丨肥女| AV一级片| 中文字幕av免费观看| 日本无码视频在线观看毒| 免费日逼视频| 粗长哭叫打桩H体育生| 日韩成人AV在线播放| 国产激情综合| 豆花AV在线| 大香蕉色婷婷| 黄片在线视频| 日韩久久视频| 夜夜骑天天| 在线免费人成视频| 打炮影院| 五月天综合视频| 婷婷五月免费视频| 91搞搞| 91麻豆福利视频| 搡BBB搡BBBB搡BBBB'| 不迷路福利视频| 成人av天堂| 日本成人电影一区二区三区| 亚洲俺去了| 免费激情网站| 日韩AV在线免费| 国产真实乱婬A片久久久老牛| 久久人精品| 九九这里有精品| 国产日逼网站| 囯产精品久久| 伊人狼人香蕉| 五月婷婷丁香综合| 色欲欲www成人网站| 囯产一级黄片| 蜜臀AV在线| 青青草超碰在线| 婷婷国产精品视频| 国产免费黄色视频网站| 中文字幕在线观看亚洲| 国产91网| 欧美日韩久久久| 在线播放日韩| 怡春院免费视频| www.一区二区| 黄片国产| 影音先锋女人aV鲁色资源网站| 日韩一级二级| 黄色影院在线观看| 日韩人妻无码电影| 麻豆911精一区二区| 在线播放中文字幕| 亚洲精品婷婷| 日皮视频在线免费观看| 欧美一级生活片| 91性爱嫩逼视频| 搡BBBB搡BBB搡我瞎了| 欧美中文字幕在线播放| 荫蒂添的高潮免费视频| 亚洲综合伊人无码| 国产a区| 中文字幕免费看| 国产九九在线视频| 人妻无码中文字幕蜜桃| 狠狠躁日日躁夜夜躁A片视频| 欧美精品久久久久久| 欧美狂操| 7799精品视频天天看| re久久| 女人A片一级黄色| 精品香蕉视频| 97久久人人| 日韩久久高清| 青青草视频免费在线观看| 招土一级黄色片| 久久成人免费| 三级自拍| 免费看黄色视频的网站| 国产AV综合网| 丰满人妻一区二区免费看| 蜜臀久久99精品久久久电影| 人人爱,人人操| 日韩日日夜夜| 九九九九九九精品视频| 亚洲人妻电影一区| 黄色在线免费看| 91亚洲国产成人精品一区| 欧美一级特黄AAAAAA片| 超碰在线人妻| 99久久久久久久久久| 欧美AAAAAA视频| 免费无码国产在线53| 欧美一级黄色A片| 成人无码久久| 亚洲91成人| 有免费的欧美操逼视频吗| 中国无码专区| 亚洲黄色网址| 亚洲精品97久久中文字幕| 婷婷深爱五月| 日本黄色视频免费| 亚洲区一区二| 三级黄色小视频| 久操视频在线| 成人在线视频免费| 黄片高清免费| 国产麻豆性爱视频| 亚洲超碰在线观看| 北京熟妇搡BBBB搡BBBB电影 | 亚洲午夜无码精品专区| 国产精品毛片| 欧美精品黄片| 人人天天夜夜| 欧美丰满美乳XXⅩ高潮www| 囯产精品久久久| AV黄色网| 日韩三级视频在线观看| 欧美激情视频在线| 久久香蕉网| 久久高清无码视频| 波多野在线视频| 乱子伦国产精品一区二区| 男人天堂综合网| 五月天婷婷无码| 久操久操久操| 黄色大片中国一级片-免费看特一级片-亚洲黄色AV | 婷婷涩嫩草鲁丝久久午夜精品| 亚洲一区二区在线免费观看| 大香蕉伊人AV| 久久牛牛| 亚洲精品国产成人AV在线| 午夜在线无码| 中文资源在线√8| 成人性视频Aⅴ| 欧美日韩免费在线播放电影在线播放电影在线播放电影免费 | sesese999| 日韩欧美高清第一期| 肏屄视频免费| 玖玖爱免费视频| 成人婷婷五月天| a黄色视频| 超碰8| 中文字幕无码乱伦| 日韩无码砖区| 日韩gay| 亚洲系列| 中国女人操逼视频| 免费A片国产毛无码A片| 图片区小说区区亚洲五月| 99久久婷婷国产精品2020| 国产18毛片18水多精品| 99操逼网| 青青草性爱| 国精自拍| 最近中文字幕av| 青草在线视频| 天天爽天天爽夜夜爽| 天天日很很日| 北条麻妃一区二区三区-免费免费高清观看 | 国产黄色在线| 亚洲精品欧美| 九九国产视频| 国产在线小电影| 激情五月丁香五月| 张柏芝BBw搡BBBB槡BBBBHDfree | 亚洲无码一二三| 成人AV三级片| 欧美日韩在线视频免费观看| 无码av免费| 亚洲AV成人一区二区三区不卡 | 日韩精品在线观看免费| 北条麻妃JUX-869无码播放| 欧美生活片18| 亚洲天堂网在线观看视频| 天天干,夜夜爽| 国产老女人农村HD| 欧美日韩综合网| 人人摸人人操人人爱| 影音先锋久久久久AV综合网成人| 8050午| 翔田千里53歳在线播放| 一牛影视精品av| 亚洲第一综合网| 国产精品一品二区三区的使用体验 | 中文字幕视频| 97精品国产| 香蕉成人A片视频| 黑人无码视频| 无码人妻一区二区三区| 一区二区三区毛片| 成人精品在线视频| 1024在线视频| 精品人妻无码| 麻豆久久久| 看操逼视频| 人人做人人爱人人做人人乐的意思| 99久久综合| 最近中文字幕免费MV第一季歌词十| 免费在线观看黄色视频| 乱伦A片| 精品国产无码怀孕| 天天爽天天干| 欧美中文字幕在线观看| 丁香五月网| 亚洲第一网站| 久久久精品| 91欧美黑人| 日韩无码人妻久久一区二区三区| 韩国午夜电影| 亚洲一区欧美二区gay| 欧洲黑人成人A版免费视频| aa人人操夜夜操人人| 韩日黄色| 亚洲第一香蕉视频| 97操逼网| 最新日韩中文字幕| 欧美午夜精品久久久久免费视 | 日本操屄视频| 国产日日日| 日韩成人无码精品| 成人日韩AV| 波多野结衣久久精品| 欧美操逼大片| 欧美精产国品一二三区别| 国产美女AV| 日韩无码123| 精品久久久国产| 99久久99久久| 伊人久久免费| 日韩午夜福利视频| 青青草免费公开视频| www黄色视频| 欧美卡一卡二| 一道本在线| 欧美日韩男女淫乱一区二区| 国产91在线中日| 国产精品免费麻豆| 毛片性爱视屏| 99久久成人| 久久久久久大香蕉| 免费看黄色视频的网站| 日韩视频中文| 黄色电影网站在线观看| 尤物在线| av无码观看| 在线观看91| 99精品视频免费观看| 黄色操逼网站?| 一级艹逼| 亚洲天堂在线观看视频网站| 天天视频亚洲| 国产18水真多18精品| 日韩美女久久| 欧美亚洲成人视频| 欧美XXX视频| 人妻人人操人人爽| 天天干天天看| 国产色视频| 日韩无码人妻久久一区二区三区 | 久久久成人视频| 日本无码一区二区三区| 西西4444WWW无码视频| 亚洲成人少妇老妇a视频在线| 亚洲中文自拍| 亚洲aaaaaa| 翔田千里无码免费播放| 日韩性爱片| 日韩三级AV| 91亚洲精品乱码久久久久久蜜桃| 九九综合久久| 亚州成熟少妇视频在线观看| 中文字幕激情精品| 黄色录像一级带| 国产熟妇搡BBBB搡BBBB搡| av官网| 99热这里只有精品7| 粉嫩小泬BBBB免费看-百度| 在线AⅤ| 特级444WWW大胆高清| eeuss| 熟妇人妻久久中文字幕| 日少妇视频| 2025无码视频| 成人免费激情视频| 中文字幕不卡一区| 国产AⅤ| 亚洲天天干| 麻豆91久久久| 五十路熟妇| 不卡视频一区| 国产办公室丝袜人妖| 躁BBB躁BBB添BBBBBB| 日韩一区二区视频| 午夜无码鲁丝午夜免费| 亲子乱婬-一级A片| 草草影院CCYYCOM屁屁影院合集限制影院 | 狼人亚洲伊人| 日本少妇bbw| 成人精品秘久久久按摩下载 | 小H片在线观看| 99在线小视频| 色色色色综合| 毛片毛片毛片毛片毛片| seseav| 一区二区高清无码| 黄色视频在线免费观| 无码人妻丰满熟妇区17水蜜桃| 中文熟妇| 91无码人妻一区二区成人AⅤ| 成人操B| 黄视频免费在线观看| 91麻豆免费看| 亚洲AV无码黑人专区| 无码AV网| 粉嫩小泬BBBBBB免费| 人人艹人人摸| 国产一级操逼| 精品国产香蕉| 亚洲黄色三级| 台湾成人综合网| 国产免费一区二区三区最新不卡| 木牛AV| 日本一级婬片A片免费播放一| BBB搡BBB搡BBB搡BBB| 91九色91蝌蚪91窝成人| 精品福利在线| 天天爽夜夜爽精品成人免费| 国产精品人人人人| 喷水视频在线观看| 92丨九色丨偷拍老熟女| 看操逼视频| 日本一本视频| 免费黄色一级视频| AV无码免费一区二区三区不卡| 操BBBB| 亚洲免费在线| 无码人妻丰满熟妇区17水蜜桃| 婷婷毛片| 操b视频在线观看| 伊人黄| 亚洲AV无码成人精品久久久| 亚洲91成人| 中文字幕在线网| 麻豆国产视频| 人妻无码一区二区三区免费| 欧美一级特黄真人做受| 日韩乱伦中文字幕| 欧美性爱无码| 中文字幕你懂的在线三级| 免费看黄视频| ThePorn-成人网站入口| 欧美视频中文字幕| 爱福利视频| 国产凹凸视频在线观看| 午夜成人中文字幕| 三级高清无码| 99唉撸吧视频免费| 欧美日韩中文视频| 色婷婷五月天在线观看| 一本色道久久综合熟妇| 男人色天堂| 97天天操| 成人午夜福利视频| 日韩一级欧美一级| 91无码一区二区三区在线| av青草| 激情亚洲婷婷| 五月久久婷婷| 国产极品久久久| 97人妻人人澡人人爽人人| 99久久精品国产精品有折扣吗 | jiujiuav| 欧美黄片AAA| 天天插天天拍| 翔田千里无码在线| 日韩精品三区| 国产精品色哟哟| 91人妻人人澡人人爽精品| 岛国无码在线| 人妻少妇一区二区| 青春草在线播放| 第一福利成人AV导航| 欧美中文字幕在线| 狠狠搞狠狠操| 五月天AV在线| 啪啪免费网站| 爱逼爱操| 亚洲男人的天堂AV| 国产精品片| 无套免费视频欧美| 91热爆TS人妖系列| 久草青青草| 中文字幕av在线| 天堂在线v| 欧美精品18| 免费中文字幕日韩欧美| 久久久精品淫秽色情| 丁香五月六月婷婷| 嫩BBB嫩BBB嫩BBB| 久久亚洲AV无码午夜麻豆| 综合久久中文字幕| 国产一级无码| 久久精品视频播放| 欧美性爱手机在线| 伊人大香蕉在线观看| 97夜色| 丁香五月婷婷久久| 黄片一区二区| 欧美乱欲视频| 色婷婷激情视频| 在线小视频| 午夜噜噜| 欧美激情另类| 蜜桃av秘无码一区三区四| 俺去啦俺去也| 做爰视频毛片下载蜜桃视频。| 桃色AV| 青草视屏| 欧美综合精品| 久久午夜无码鲁丝片午夜精品偷窥 | 思思精品在线| 日韩无码视频网| 99久久久成人国产精品| 18精品爽视频| 大香蕉久久久久久| 白洁91视频| 欧美黄色成人视频| www.男人天堂| 亚洲一线播放| 四虎成人无码A片观看| 激情小说区| 老太色HD色老太HD.| 欧美第五页| 人人色人人色| www.久久精品视频| 中文字幕第12页| 国产乱婬片视频| 亚洲综合在线播放| 国产av影院| 影音先锋男人天堂| 天天草天天| 亚洲搞清视频日本|