当前位置: 首页 > news >正文

重庆响应式网站设计静态网站登陆怎么做

重庆响应式网站设计,静态网站登陆怎么做,定制企业网站费用,宁波seo公司哪家好token登录的实现 我这种token只是简单的实现token,就是后端利用UUID 生成简单随机码,利用随机码作为在Redis中的键,然后存储的用户信息作为值,在每次合理请求的时候对token的有效时间进行刷新(利用拦截器)&…

token登录的实现

我这种token只是简单的实现token,就是后端利用UUID 生成简单随机码,利用随机码作为在Redis中的键,然后存储的用户信息作为值,在每次合理请求的时候对token的有效时间进行刷新(利用拦截器),以确保用户信息的有效性。

为什么要用token

使用令牌(Token)进行身份验证和授权是一种常见的方式,特别适用于分布式和跨域请求的应用程序。

1. 为什么要使用 Token:

  • 无状态性:Token 身份验证是无状态的,不需要在服务器端存储会话信息。每个请求都包含了身份信息,因此服务器不需要维护状态。
  • 跨域支持:Token 可以轻松处理跨域请求,因为令牌可以在 HTTP 请求的头部(通常是 Authorization 头部)中传递,而不受同源策略的限制。
  • 扩展性:Token 可以包含任意信息,因此可以用于传递用户权限、角色、过期时间等信息。

2. Token 使用逻辑:

  • 用户登录成功后,生成一个 Token 并将用户信息存储在服务器端(如 Redis)以便快速验证和获取用户信息。
  • 向前端返回 Token。
  • 前端将 Token 存储在本地(通常是 sessionStorage 或 localStorage)。
  • 在每个后续的请求中,前端将 Token 通过请求头(通常是 Authorization 头)发送给后端。
  • 后端从请求头中获取 Token,验证其合法性,并使用 Token 获取用户信息。

后端(Spring Boot)示例:

定义login接口

@GetMapping("/login")public BaseResponse<String> login(String username,String password){LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(User::getUsername,username);User one = userService.getOne(lambdaQueryWrapper);if(one == null){throw new BusinessException(ErrorCode.NOT_FOUND_ERROR);}String token = UUID.randomUUID().toString();redisTemplate.opsForHash().putAll("test:user:"+token, BeanUtil.beanToMap(one));redisTemplate.expire("test:user:" + token,2, TimeUnit.MINUTES);return ResultUtils.success(token);}

定义一个获取用户信息的其他接口

@GetMapping("/get")public BaseResponse<User> get(){return ResultUtils.success(UserHolder.getValue());}

创建拦截器:

public class LoginInterceptor implements HandlerInterceptor {private RedisTemplate<String,Object> redisTemplate;public LoginInterceptor(RedisTemplate<String,Object> template){this.redisTemplate = template;}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// 获取 sessionString token = request.getHeader("Authorization");// 检查用户是否已登录User user = new User();BeanUtil.fillBeanWithMap(redisTemplate.opsForHash().entries("test:user:"+token),user,false);if(user == null|| BeanUtil.isEmpty(user)){throw new BusinessException(ErrorCode.NOT_LOGIN_ERROR);}redisTemplate.expire("test:user:"+token,2, TimeUnit.MINUTES);// 将用户数据存储到 ThreadLocal 中,以便在整个请求周期内访问UserHolder.setValue(user);// 进行其他逻辑验证,根据需求自行添加return true; // 允许请求继续执行}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {// 在请求处理之后执行,可以对 ModelAndView 进行修改}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {// 在请求完成之后执行,用于资源清理等操作// 清理 ThreadLocal 中的用户数据,防止内存泄漏UserHolder.clear();}

注册拦截器:

@Configuration
public class MvcConfig implements WebMvcConfigurer {@Resourceprivate RedisTemplate<String,Object> redisTemplate;@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 登录拦截器registry.addInterceptor(new LoginInterceptor(redisTemplate)).addPathPatterns("/**").excludePathPatterns("/user/login");}
}

使用结果截图

结果返回了一个token,这个token前端拿到以后要保存到sessionStorage或者LocalStorage里面,再把这个token送到请求头中,就可以啦

在这里插入图片描述

另一个请求:

设置请求头

设置Authorization
在这里插入图片描述
然后发起就可以得到啦
在这里插入图片描述

如果没有authorization就是得到未登录结果

在这里插入图片描述

前端(Vue.js)示例:

<!-- Login.vue -->
<template><div><input v-model="username" placeholder="Username" /><input type="password" v-model="password" placeholder="Password" /><button @click="login">Login</button></div>
</template><script>
export default {data() {return {username: '',password: ''};},methods: {login() {// 发送登录请求,获取 Tokenaxios.post('/api/user/login', { username: this.username, password: this.password }).then(response => {const token = response.data.token;// 存储 Token 到 sessionStoragesessionStorage.setItem('token', token);// 跳转到其他页面或进行其他操作}).catch(error => {console.error('Login failed:', error);});}}
};
</script>
http://www.yayakq.cn/news/612008/

相关文章:

  • 低俗网站推广哪里找织梦城市门户网站模板
  • 陶瓷网站模板饭店的网站建设进行评价
  • 建设局网站首页cms系统设计方案
  • 下做图软件在哪个网站下载器com天堂网
  • 制作网站的代码建设学校网站的报告
  • 郑州网站设计专家做包装盒有哪些网站
  • 东莞网站优化平台企业年报网上申报入口免费官方
  • 软件跟网站开发抖音推广项目计划书
  • 昆明微信网站建设人社门户网站建设方案
  • 网站虚拟主机销售手机网站开发是什么
  • 网站备案号代码上海高端网站定制开发
  • 重庆人居建设集团网站wordpress创建目录
  • 哪家高端网站建设好宁夏做网站的
  • 永春县住房和城乡规划建设局网站网络运营课程培训班
  • 自已建网站做南美生意做什么网站好
  • 泰安网站建设哪家专业免费推广广告链接
  • 网站设计与应用方向论文ppt制作软件模板网站
  • 公司地址怎么注册定位网页优化与网站优
  • 贵州省建设监理协会网站是什么动画设计专业哪个学校比较好
  • 昆山城市建设网站做网站老板嫌弃太丑谁的锅
  • 专业服务好的网站设计制作蜜蜂vp加速器七天试用
  • jquery网站模版英国网站后缀
  • 网站设计登录界面怎么做企业微信自建应用怎么开发
  • 莆田专门做网站该网站的域名为
  • 湖北襄阳网站建设视觉设计的特点和优势
  • 多语言网站建设费用开发公司工程部管理制度
  • 常熟做网站多少钱wordpress评论去掉邮箱
  • 网站开发的技术分类网站美工怎么做
  • 高端网站特色百度竞价推广代理
  • 网上做网站东湖南昌网站建设公司