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

网页设计师主要是做什么的呢杭州上城区抖音seo如何

网页设计师主要是做什么的呢,杭州上城区抖音seo如何,做的好的淘宝客网站,网站管理助手 1004文章目录 前言一、接口扩展1. LoginStorage2. LocalLoginStorage3. RedisLoginStorage4. 参数配置 二、登录相关接口改动1.登录接口2. 登录拦截器 总结 前言 前面分别介绍了本地Map和redis存储用户登录信息,但是第二天我登录就出现问题了,因为我Redis部…

文章目录

  • 前言
  • 一、接口扩展
    • 1. LoginStorage
    • 2. LocalLoginStorage
    • 3. RedisLoginStorage
    • 4. 参数配置
  • 二、登录相关接口改动
    • 1.登录接口
    • 2. 登录拦截器
  • 总结


前言

前面分别介绍了本地Map和redis存储用户登录信息,但是第二天我登录就出现问题了,因为我Redis部署在虚拟机里面,不可能每次都专门启动虚拟机,来回替换代码也太麻烦,这里我们根据配置参数来控制下将用户信息存储到哪里。


一、接口扩展

开放扩展,关闭修改。

1. LoginStorage

package org.example.springboot3.bigevent.login;/*** Create by zjg on 2024/6/3*/
public interface LoginStorage {public void put(String id, String token);public String get(String id);public boolean remove(String id);
}

2. LocalLoginStorage

package org.example.springboot3.bigevent.login;import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** Create by zjg on 2024/6/3*/
@ConditionalOnProperty(name="login.storage",havingValue = "0")
@Component
public class LocalLoginStorage implements LoginStorage{private Map<String,String> loginUsers=new ConcurrentHashMap<>(256);@Overridepublic void put(String id, String token) {loginUsers.put(id, token);}@Overridepublic String get(String id) {return loginUsers.get(id);}@Overridepublic boolean remove(String id) {return loginUsers.remove(id)!=null;}}

3. RedisLoginStorage

package org.example.springboot3.bigevent.login;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;/*** Create by zjg on 2024/6/3*/
@ConditionalOnProperty(name="login.storage",havingValue = "1")
@Component
public class RedisLoginStorage implements LoginStorage{@AutowiredStringRedisTemplate stringRedisTemplate;@Overridepublic void put(String id, String token) {stringRedisTemplate.opsForValue().set(id,token,24, TimeUnit.HOURS);}@Overridepublic String get(String id) {return stringRedisTemplate.opsForValue().get(id);}@Overridepublic boolean remove(String id) {return Boolean.TRUE.equals(stringRedisTemplate.delete(id));}
}

4. 参数配置

这个参数控制使用本地存储、还是redis存储,这样扩展起来也方便。

login:storage: 0

二、登录相关接口改动

1.登录接口

@Autowired
LoginStorage loginStorage;
@RequestMapping("login")
public Result login(@Valid User loginUser){String message="用户名/密码不正确";User user = userSerivce.findUserByName(loginUser.getUsername());if(user!=null){//用户存在if(user.getPassword().equals(Md5Util.getMD5String(loginUser.getPassword()))){//密码正确Map<String,Object> claims=new HashMap();claims.put("userId",user.getId());claims.put("username",user.getUsername());String token = JwtUtils.create(claims);loginStorage.put(user.getId().toString(),token);return Result.success("登录成功",token);}}return Result.error(message);
}

2. 登录拦截器

@Autowired
LoginStorage loginStorage;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String token = request.getHeader("Authorization");if(token!=null&&token.contains("Bearer")){String tokenStr = token.substring(token.indexOf("Bearer") + 7);boolean verify = JwtUtils.verify(tokenStr);if(verify){//此处解析loginUsers,验证用户已登录Map<String, Object> claims = JwtUtils.getClaims(tokenStr);if(tokenStr.equals(loginStorage.get(claims.get("userId").toString()))){ThreadLocalUtil.set(claims);//用户信息放置ThreadLocalreturn true;};}}response.setStatus(HttpStatus.UNAUTHORIZED.value());response.setContentType("application/json;charset=UTF-8");ObjectMapper objectMapper = new ObjectMapper();objectMapper.writerFor(Result.class);String message = objectMapper.writeValueAsString(Result.error("token验证失败,请重新获取token后重试!"));response.getWriter().println(message);return false;
}

总结

回到顶部

这样我们就可以通过参数login.storage的修改,灵活地调整用户登录信息的存储方式了。
后面的登出接口和修改密码接口也会涉及到模式的使用。

http://www.yayakq.cn/news/889900/

相关文章:

  • 江都区城乡建设局网站马局网站建设与管理需要什么软件有哪些方面
  • 网站可以增加关键词吗微课网站开发
  • 中邦建设工程有限公司官方网站php企业网站开发实训报告
  • 做建材网站张家港城市建设规划局网站
  • WordPress中英文旅游模板seo排名诊断
  • 亳州蒙城网站建设wordpress自动提取描述关键词
  • 企业网站php模版泰安最大的竞价排名公司
  • 卓越网的企业类型和网站种类郑州封控最新消息今天
  • 网站开发有哪些内容1小时教你做出个人网页
  • 网站应用市场设计建设工程合同司法解释2021
  • 网站开发后台注意事项中山网站代运营
  • 廊坊建设企业网站修改文案支持在线图片编辑
  • 企业网站建设方案书目录软件开发外包合同
  • 做一件代发哪个网站好设计品牌网站公司
  • 吉林省建设标准化网站公司公司网站建设公司
  • 网站同时做竞价和优化可以抚州做网站公司
  • 网站域名密码找回网站建设平台信息
  • 适合国外网站的dns烟台城乡住房建设厅网站
  • 网站免费广告高端营销型网站建设品牌
  • 网站后台样式模板做医疗竞价网站
  • 网站设计公司哪家专业黑马程序员python
  • 上海高端it网站建设小说网站怎么做原创
  • 怎样自己免费搭建网站wordpress如何设置目录权限设置
  • 开网站赚钱wordpress公众号涨粉插件
  • 怀化住建部网站做网站域名优化的怎么样
  • 公司网站优势公司将员工外包给第三方公司
  • dy刷粉网站推广马上刷做网站卖东西赚钱吗
  • 购物网站建设的选题意义站长之家素材网
  • 专业做高校网站群管理系统微擎做网站费用
  • 好的案例展示网站网页游戏排行榜大全