@GetMapping("/getUserInfo")
public R getMemberInfo(HttpServletRequest request){
String userId = JwtUtils.getMemberIdByJwtToken(request);
User user= userService.getById(userId);
return R.ok().data("userInfo",user);
到此为止,完成了一个简单的token跨域验证。
前端部分需要将token字符串和用户信息存入的Cookie中,因此需要引入js-cookie。前端采用axios发送请求,所以还需要引入axios。1、封装axios创建一个request.js文件,用来封装axios。import axios from 'axios'; // 引入axiosimport cookie from 'js-cookie'; // 引入js-cookie...
打开src/services/api.js并修改config.headers以获取适当的后端(在教程中找到)。
instance . interceptors . request . use (
( config ) => {
const token = TokenService . getLocalAccessToken ( ) ;
if ( token ) {
// config.headers["Authorization"] = 'Bearer ' + token; // for Spring Boot back-end
config
axios 中的拦截器 ax.interceptors.request 和 ax.interceptors.response
// http request 拦截器
ax.interceptors.request.use(
config => {
**// 验证是否登录获取了token,如果有token ,那么就加到请求头中**
if (store.state.jwtToken) {
config.headers.Authorizati
import com.zuijin.vue2blog.common.utils.JwtUtil;
import com.zuijin.vue2blog.service.UserComDetailsService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.aut
认证和授权,其实吧简单来说就是:认证就是让服务器知道你是谁,授权就是服务器让你知道你什么能干,什么不能干(例如下面meta元信息),认证授权俩种方式:Session-Cookie与JWT,下面我们就针对这两种方案就行阐述。
说起JWT,我们应该来谈一谈基于token的认证和传统的session认证的区别。毕竟我们在使用jwt之前,是使用session认证的。
传统的session认...
哈希:对复杂的数据进行摘要,10G 的内容,如果改了1kb ,那么它的哈希值也会改变的
实现方式
流程:我们以登录过程为例子,登录成功后签发 token,访问接口时携带 token
签发 Token
可以通过 json
一个项目学会前端实现登录拦截
一个项目学会vue全家桶+axios实现登录、拦截、登出功能,以及利用axios的http拦截器拦截请求和响应。
前言该项目是利用了Github 提供的personal token作为登录token,通过token访问你的Repository List。通过这个项目学习如何实现一个前端项目中所需要的
登录及拦截、登出、token失效的拦截及对应 axios 拦截器
1. 在服务端生成 JWT 并返回给客户端。
2. 客户端保存 JWT 并在请求中加上 HTTP Header,如 "Authorization: Bearer JWT"。
3. 服务端收到请求后验证 JWT 的有效性。
4. 如果 JWT 有效,则允许访问请求的资源。
以下是一个使用 Shiro 实现 JWT 验证的示例代码:
```java
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
public class JwtRealm extends AuthorizingRealm {
private String secretKey;
public JwtRealm(String secretKey) {
this.secretKey = secretKey;
@Override
public boolean supports(AuthenticationToken token) {
return token instanceof JwtToken;
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// 这里可以根据 JWT 中的自定义字段来进行权限控制
return null;
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
JwtToken jwtToken = (JwtToken) token;
String jwt = jwtToken.getPrincipal().toString();
Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody();
// 验证 JWT 是否过期
if (claims.getExpiration().before(new Date())) {
throw new AuthenticationException("JWT 已过期");
// 这里可以使用 claims 中的用户信息来创建 SimpleAuthenticationInfo 对象
return new SimpleAuthenticationInfo(jwt, jwt, "j