
SpringSecurity
文章平均质量分 87
SpringSecurity
-代号9527
逢山开路,遇水搭桥!纸上得来终觉浅,绝知此事要躬行。
展开
-
【SpringSecurity】十七、OAuth2授权服务器 + 资源服务器Demo
创建一个中转类,实现UserDetails,以后返回给框架(也可以用框架自己的User类,我觉得自己写个中转类更顺手)。注意其聚合SysUserPo以及权限属性。因SysUser我设计的简略,因此UserDetails的是否被禁用、是否过期等字段直接返回true,不再去自定义的SysUser中去查。向服务方获取授权码。携带上面申请的令牌访问测试接口。携带此令牌向资源服务器发起请求。3)用户角色关系表sys_user_role。授权服务器配置完成,启动服务。原创 2024-03-21 19:26:12 · 3079 阅读 · 17 评论 -
【SpringSecurity】十六、OAuth2.0授权服务器、资源服务器的配置(理论部分)
授权服务:负责校验接入的客户端、登录的用户账户是否合法,以及颁发token.资源服务:校验token,返回资源信息原创 2024-03-21 17:06:39 · 3534 阅读 · 0 评论 -
【SpringSecurity】十五、完成系统支持Github三方登录
是一个预定义的通用OAuth2Provider,为一些知名资源服务API提供商如Google、GitHub、Facebook,预定义了一组默认的属性。包括授权码URI、换取令牌URI和请求用户信息URI,因为它们不经常变化。所以配置GitHub客户端时,只需要提供client-id和client-secret就行。请求Github的授权服务器时,携带clinet_id和secret,Github就知道你是一个合法的客户端应用。在github页面完成登录,在授权页面点击Authoize授权。原创 2024-03-18 10:45:32 · 1539 阅读 · 1 评论 -
【SpringSecurity】十四、OAuth2.0协议
关于第三方客户端系统何时用refresh_token来刷新令牌,可以写定时任务(授权码换token时,access_token的过期时间也返回过来了),也可以等出现access_token过期的返回结果时,再做刷新处理。比如:用户A微信扫码登录网站B,即用户A授权网站B去微信服务器拿自己的部分信息,以免去在网站B重复输入信息注册的麻烦,当然,你的微信登录密码,网站B并不知道。三方登录,社交登录(Q、V)等,比如用户想登录A网站,A网站让用户授权第三方网站,获取到用户在第三方网站的身份信息后,完成登录。原创 2024-01-29 15:25:08 · 1295 阅读 · 0 评论 -
【SpringSecurity】十三、基于Session实现授权认证
定义三个接口,登录,服务端保存session,登出,让session失效。以及一个资源接口,查看当前是登录访问资源,还是未登录访问资源。客户端下次再请求,就带上sid,服务端校验是否存在对应的session,存在则不要求用户再登录了。服务端返回给客户端session id (sid),被客户端存到自己的cookie中。用户认证成功后,服务端生成用户数据保存在session中。拦截器add并放行/login,只测/r**接口。修改实体类,加个权限字段,存储用户权限。加个测试资源接口/r2。原创 2024-03-19 15:32:36 · 1236 阅读 · 0 评论 -
【SpringSecurity】十二、集成JWT搭配Redis实现退出登录
因为JWT的无状态,服务端无法在使用过程中主动废止某个 token,或者更改 token 的权限。也就是说,目前,一旦 JWT 签发了,就只能等它到过期时间才能作废,即使用户已经退出登录。③ 用户每次访问时,先校验jwt是否合法,如果合法再从redis里面取出logintoken:jwt判断这个jwt还存不存在,如果不存在就说是用户已经退出登录了。注意过期时间和jwt的过期时间保持一致,jwt过期时间可查看下创建jwt时的withExpiresAt方法。,key的过期时间和token自身过期时间一致。原创 2023-09-03 17:32:19 · 2264 阅读 · 0 评论 -
【SpringSecurity】十一、SpringSecurity集成JWT实现token的方法与校验
下面是安全用户类,用于在数据库的用户对象类SysUser和返给框架的官方对象类UserDetails之间做过渡转换。这里的命名改为JWTService好点,Utils命名似乎偏静态方法一点。修改下安全配置类,把上面的处理器和过滤器加进来。,当用户登录认证成功后,会执行这个处理器,即。原创 2023-09-01 20:29:18 · 1385 阅读 · 0 评论 -
【SpringSecurity】十、JWT工具类
JWT就是一个加密的带用户信息的字符串,没学习JWT之前,我们在项目中都是返回一个基本的字符串,然后请求时带上这个字符串,再从session或者redis中(共享session)获取当前用户,学过JWT以后我们可以把用户信息直接放在字符串返回给前端,然后用户请求时带过来,我们是在服务器进行解析拿到当前用户,这就是两种登录方式,这两种方式有各自的优缺点。原创 2023-09-01 11:18:20 · 996 阅读 · 0 评论 -
【SpringSecurity】九、Base64与JWT
(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,用于在各方之间作为JSON对象安全地传输信息。此信息可以通过数字签名进行验证和信任。JWT可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。官方网址:https://jwt.io/调试页面:https://jwt.io/学习文档:https://jwt.io/introduction/授权:一次登录后,后续请求携带token,校验合法的token,则允许访问系统的资源。原创 2023-08-31 21:01:41 · 1115 阅读 · 0 评论 -
【SpringSecurity】八、集成图片验证码
SpringSecurity是通过过滤器链来完成的,接下来的验证码,可以尝试创建一个过滤器放到Security的过滤器链中,在自定义的过滤器中比较验证码。原创 2023-08-31 19:04:44 · 698 阅读 · 0 评论 -
【SpringSecurity】七、SpringSecurity集成thymeleaf
/这里别用RestController了,不再返回一个json对象或者普通字符串了/*** 跳转到登陆页面*/@RequestMapping("/toLogin") //GET、POST都行的意思上面的这个return "login"字符串,是返回thymeleaf的逻辑视图名,物理视图 = 前缀 + 逻辑视图 + 后缀,即/templates/ + login + .html(点住application.yaml文件中thymeleaf的配置查看源码:/*** 登录成功后进入主页*/原创 2023-08-30 21:08:40 · 1463 阅读 · 0 评论 -
【SpringSecurity】六、基于数据库的认证与授权
新建安全用户类,继承UserDetails,并和库里的SysUser类做转换。(注意这种思路两个类之间做转换,一个类做为属性定义在另一个类中)如果能在数据库查到这个用户,就将他包装成UserDetails的格式返给框架。到此,实现了将基于数据库自定义的SysUser对象和返给框架的UserDetails对象做了关联。修改上面定义的SecurityUser类,加入权限。新增属性并加Set方法。mapper目录下新建映射文件SysUserMapper.xml。此时用户是可以正常登录的。原创 2023-08-28 19:35:12 · 532 阅读 · 0 评论 -
【SpringSecurity】五、UserDetails接口和UserDetailsService接口(原理、流程)
接下来自己定义一个用户类SecurityUser类,也去实现UserDetails接口,重写UserDetails接口方法时,直接写死一个用户信息,一会儿new这个自定义的SecurityUser类,也就和上面的User.builder一个意思。重写loadUserByUsernam方法,并当用户名等于自定义的SecurityUser对象中的用户名时,返回SecurityUser对象。查看User类的源码,其实现了UserDetails接口,因此上面才可以直接创建User对象。重启服务,登录下,一切正常。原创 2023-08-23 20:13:20 · 5583 阅读 · 0 评论 -
【SpringSecurity】四、登录处理器
前后端分离背景下,前后端通过json进行交互,登录成功或失败,返回的不是一个html页面,而是一个json串。原创 2023-08-23 07:00:00 · 569 阅读 · 1 评论 -
【SpringSecurity】三、访问授权
预授权即访问前判断有无权限,后授权则是方法执行完以后才判断是否有权限,后授权的使用场景比较少。未做授权时,默认登录成功的用户可以访问所有资源(调任意一个接口),但有的接口只能允许管理员调用,因此,这里需要再实现授权功能。当然,从代码层来说,角色和权限并没太大区别,并特别是在Spring Security中。以上两种写法,顺序不同,获取当前登录用户时,得到的权限值也不一样。此时,登录有不同权限的不同角色,其只能访问对应有权限的方法。注意,这里控制的是对方法的访问,仅仅是限制对方法的访问。原创 2023-08-22 16:05:54 · 823 阅读 · 0 评论 -
【SpringSecurity】二、密码处理与获取当前登录用户
Component@Override@Autowired以上暴露了Authentication认证对象,且隐藏静态访问代码,让业务解耦并方便测试。原创 2023-08-22 13:25:34 · 1404 阅读 · 0 评论 -
【SpringSecurity】一、SpringSecurity入门
直白讲就是别每干一件事就查身份,给你个五年有效期的身份证,你带身上或者我帮你存着,有这个证明,在这期间你就不用再反复认证。此时再访问上面controller中的接口,就会被Spring Security拦截,且Spring Security还提供了一个登录界面。有很多权限,把权限一个一个加给用户很繁琐,所以 将一组权限打包给一个角色,再让用户和角色挂钩。即没有加入安全框架的代码程序,默认所有资源均不受保护,可被随意访问,因此,需要集成安全框架。启动程序,此时不论是谁,访问这三个接口资源,都能成功返回信息。原创 2023-08-21 15:53:38 · 553 阅读 · 0 评论