简介单点登录(Soo)

  • 使用token技术完成单点登录
  • 使用jwt规则创建token
  • 导入依赖
<!-- JWT--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency>
  • 创建jwtutils
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;import javax.servlet.http.HttpServletRequest;
import java.util.Date;public class JwtUtils {// 常量public static final long EXPIRE = 1000 * 60 * 60 * 24; // token过期时间public static final String APP_SECRET = "ukc8BDbRigUDaY6pZFfWus2jZWLPHO"; // 秘钥加密操作// 生成token字符串的方法public static String getJwtToken(String id, String nickname) {String JwtToken =Jwts.builder()/*jwt头信息*/.setHeaderParam("typ", "JWT").setHeaderParam("alg", "HS256")/*设置过期时间*/.setSubject("lmh-user") // 主题.setIssuedAt(new Date()) // 颁发时间.setExpiration(new Date(System.currentTimeMillis() + EXPIRE))// 设置token主体部分 ,存储用户信息.claim("id", id).claim("nickname", nickname)/*签名哈希*/.signWith(SignatureAlgorithm.HS256, APP_SECRET).compact();return JwtToken;}/*** 判断token是否存在与有效*  * @param jwtToken* @return*/public static boolean checkToken(String jwtToken) {if (StringUtils.isEmpty(jwtToken)) return false;try {Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 判断token是否存在与有效*  * @param request* @return*/public static boolean checkToken(HttpServletRequest request) {try {String jwtToken = request.getHeader("token");if (StringUtils.isEmpty(jwtToken)) return false;Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 根据token字符串获取会员id*  * @param request* @return*/public static String getMemberIdByJwtToken(HttpServletRequest request) {String jwtToken = request.getHeader("token");if (StringUtils.isEmpty(jwtToken)) return "";Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);Claims claims = claimsJws.getBody();return (String) claims.get("id");}
}
  • 创建MD5加密密码工具类
public final class MD5 {public static String encrypt(String strSrc) {try {char hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8','9', 'a', 'b', 'c', 'd', 'e', 'f' };byte[] bytes = strSrc.getBytes();MessageDigest md = MessageDigest.getInstance("MD5");md.update(bytes);bytes = md.digest();int j = bytes.length;char[] chars = new char[j * 2];int k = 0;for (int i = 0; i < bytes.length; i++) {byte b = bytes[i];chars[k++] = hexChars[b >>> 4 & 0xf];chars[k++] = hexChars[b & 0xf];}return new String(chars);} catch (NoSuchAlgorithmException e) {e.printStackTrace();throw new RuntimeException("MD5加密出错!!+" + e);}}public static void main(String[] args) {System.out.println(MD5.encrypt("111111"));}}
  • 编写controller
@RestController
@RequestMapping("/ucenter/member")
@CrossOrigin
public class MemberController {@Autowiredprivate MemberService memberService;//登录@PostMapping("login")public R login(@RequestBody Member member){//返回token值String token=memberService.login(member);return R.ok().data("token",token);}//根据token获取用户信息@GetMapping("getMemberInfo")public R getMemberInfo(HttpServletRequest request){//用jwt工具类的方法获取用户idString memberId= JwtUtils.getMemberIdByJwtToken(request);//查询数据库,根据id获取用户信息Member member = memberService.getById(memberId);return R.ok().data("userInfo",member);}
  • 编写service
/*** <p>* 会员表 服务实现类* </p>** @author testjava* @since 2020-09-09*/
@Service
public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {@Autowiredprivate RedisTemplate<String, String> redisTemplate;//登录@Overridepublic String login(Member member) {String mobile = member.getMobile();String password = member.getPassword();if(StringUtils.isEmpty(mobile) || StringUtils.isEmpty(password)){throw new LmhException(20001,"登录失败");}//判断手机号是否正确QueryWrapper<Member> wrapper=new QueryWrapper<>();wrapper.eq("mobile",mobile);Member member1 = baseMapper.selectOne(wrapper);//判断对象是否为空if(member1==null){throw new LmhException(20001,"登录失败");}//判断密码时,先加密在对比if(!MD5.encrypt(password).equals(member1.getPassword())){throw new LmhException(20001,"登录失败");}//判断用户是否被禁用if(member1.getIsDisabled()==1){throw new LmhException(20001,"登录失败");}//登录成功,生成一个tokenString token = JwtUtils.getJwtToken(member1.getId(), member1.getNickname());return token;}

springboot整合soo单点登录相关推荐

  1. SpringBoot整合Shiro实现登录认证和授权CHCache

    文章目录 一. springboot实现普通登录 1 添加依赖 2 编写配置文件 3 新建实体类和mapper 4 编写业务层代码 5 编写控制器 6 编写启动类 7 编写登录页面和主页面 二. sp ...

  2. 企业门户应用整合中单点登录(SSO)的技术实现与应用

    企业门户应用整合中单点登录(SSO)的技术实现与应用 相关专题: 电子应用 时间:2009-07-27 09:56来源: icbuy亿芯网 1 引 言 企业在信息化建设过程中,由于经常采用逐步信息化的 ...

  3. SpringBoot学习之单点登录

    SpringBoot学习之单点登录 单点登录 登录 注销 部署 实现 主要功能 重要步骤 sso-client拦截未登录请求 sso-server拦截未登录请求 sso-server验证用户登录信息 ...

  4. Shiro整合SSO单点登录系统

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37797991/article/ ...

  5. SpringBoot+SpringSecurity+JWT整合实现单点登录SSO史上最全详解

    作者:波波烤鸭 blog.csdn.net/qq_38526573/article/details/103409430 一.什么是单点登陆 单点登录(Single Sign On),简称为 SSO,是 ...

  6. SpringBoot整合Shiro搭建登录注册认证授权权限项目模板

    主要内容: 1 SpringBoot整合Shiro安全框架; 2 Shiro主要学习内容总结;(执行流程.主要对象接口.注意事项等) 3 Redis实现对权限信息缓存; ! 温馨提示: 想要快速搭Sh ...

  7. SpringBoot整合JWT实现登录认证

    目录 什么是JWT 为什么使用JWT JWT的使用场景 JWT的结构 JWT的请求流程 SpringBoot整合JWT 引入依赖 编写配置文件 token生成与验证工具类 拦截器拦截token 设置拦 ...

  8. JWT实战 Spring Security Oauth2整合JWT 整合SSO单点登录

    文章目录 一.JWT 1.1 什么是JWT 1.2 JWT组成 头部(header) 载荷(payload) 签名(signature) 如何应用 1.3 JJWT 快速开始 创建token toke ...

  9. cas之soo单点登录初步探究

    最近公司要整合系统,需要用到cas单点登录,在网上找了一大堆,经过筛选,特此推荐2篇精华 http://www.micmiu.com/enterprise-app/sso/sso-cas-sample ...

最新文章

  1. PHP Session中保存Object
  2. 什么是第三方物流管理?如何套用模板进行绘制
  3. Lombok 安装、入门 - 消除冗长的 java 代码
  4. Async await 异步编程说明
  5. PHP如何处理emoji表情存入utf8的数据库
  6. SAP Spartacus SSR模式启用失败的一个原因:SSR rendering exceeded timeout
  7. 程序猿修仙之路--数据结构之你是否真的懂数组?
  8. vi或vim查找替换
  9. 突击计划——求整数中的较大者
  10. OSAL操作系统抽象层
  11. 超星尔雅不让下载?课件,拿来吧你!
  12. mysql PTA题解查询平均成绩最高的前三名同学
  13. 8.4 不能外包的解谜算法
  14. java读取目录下所有txt_java读取同目录下的txt文件
  15. R语言使用epiDisplay包的summ函数计算向量数据在不同分组下的描述性统计汇总信息并可视化有序点图(名称、有效值个数、均值、中位数、标准差、最大值、最小值)
  16. jspssh大学生社团活动报名管理系统
  17. uniapp中根据URL链接生成二维码(适用所有Javascript运行环境的前端应用),保存二维码到本地相册。
  18. 2021高考枣强中学成绩查询,枣强中学,衡水系的重点高中,成绩斐然
  19. 基于PHP的连锁酒店管理系统
  20. 访问控制列表--标准ACL

热门文章

  1. h5骨架屏快速生成方案
  2. C/C++编程学习 - 第20周 ④ 排序
  3. Cnopendata铁路信息数据
  4. SpringBoot和Vue跨域问题
  5. CentOS7 启动docker.service失败
  6. android byte[] 清空,android byte的使用
  7. dbNSFP:非同义突变功能注释数据库
  8. STM32自平衡小车
  9. 在C#中使用ZBar识别条形码
  10. 动态表头excel导出(java)