springboot2+sercuity+jwt整合1

第一步先讲Sercuity整合

设计思路步骤

  1. 引入maven工程(这里只用做基本信息拦截,所以没用auth2包)

 

Spring Security 包含的AOP,config,web 3个子包 

AOP包为核心思想包

web包里面包含过滤器和相关的Web安全基础结构代码。任何具有servlet API依赖性的东西。如果您需要Spring Security Web身份验证服务和基于URL的访问控制,则需要它

config包里包含安全名称空间解析代码和Java配置代码。如果您使用Spring Security XML命名空间进行配置或Spring SecurityJava配置支持

  1. 核心类详解

webSecurityConfigurerAdapter  userDetailsService  userDetails         AbstractSecurityInterceptor

 

1.webSecurityConfigurerAdapter(安全配置适配器) 主要方法有configure ,对HttpSecurity的配置和对AuthenticationManagerBuilder的配置,对userDetailsService的注入

  1. userDetailsService(认证用户安全接口)主要方法是loaduserByUsername,通过用户名拿到用户认证身份

 

  1. userDetails(认证用户实体类)可写一个User类继承

 

  1. AbstractSecurityInterceptor(安全拦截抽象接口),可以执行多层安全拦截,doFilter使每层拦截都能获取认证权限,比较可以加上auth2安全证书认证

补充说明:

Spring Security其实除了权限管理器以外还有决策管理器可以实现路径访问权限,通过匿名用户来达到访问项目一些公共区域(游客功能),主要类是AccessDecisionManager

设计如下

 

3设计分析

1.创建Sercurity需要的数据库表

   admin_user ,admin_role,admin_menu 3个基础表

 添加admin_role_menu作为关联表

2创建一个简单的保存用户流程

3创建测试类,使用模拟参数发送http请求

  出现下面结果

 

直接访问地址http://localhost:8016/admin/user/save

401出现原因:未授权

 

发现问题,一步一步来,webSecurityConfigurerAdapter继承类中是否有配置路径:

 没有此路径设置

其他路径都需要,再看看决策管理类AccessDecisionManager,decide方法中配置的匿名用户访问路径,也没有,所以证明,此接口访问需要安全身份验证,结果正确

 

再规定一个可以访问的路径

访问接口此接口,顺利通过

 

 

 对安全信息进行处理

 

然后再此访问接口

发现无法获取角色信息,另外拦截后返回信息是

http://lo host:801 6/  cal  lear all  http:mocaIhost:8016/vI/admin/user/save  Authorization  Headers (2)  Body  Pre-request Script  Test Results  Tests  Content-Type  Authorization  application/json  123456  Body  P retry  Cookies (1)  Raw  "code .  "data": "  "message" :  Headers (9)  Preview  "1003",  JSON

证明是起了作用的,同样试下,匿名信息的情况

http://IocaIhost:8016/autMogin  Authorization  form-data  loginName  pa ssword  Headers  Body  Pre-request Script  Tests  O  x-www-form-urlencoded  O  raw  Test Results  O  binary  Zhouxl  admin  Body  Pretty  Cookies (1)  Raw  Headers (10)  Preview  "timestamp":  "status":  "error": "Internal Server Error",  "message" :  "'auth/ login"  "path":

 

发现也被拦截了,那么有2个问题,正常用户,匿名用户如何传递正确的参数呢?

 

仔细检查,后发现/auth/login.其实有正确的请求到接口,只是在参数中不包含user而被访问再次拒绝

 

再次换个可通过的匿名接口测试

http://localho  GET v  Clear all  Autho rization  No Auth  httpWIocaIho:  http://localho  http-WIocaIho:  Tests  http://localho:  http://IocaIhost:8016/favicon.ico  Headers  No Environment  Params  authorization. Learn more about authorization  Headers (I I)  quest Script  Test Resu Its  This request does not use  a ody  Cookies (1)  200 0K  Time: 44337 r

发现没有问题!

 那么如何判断自身的安全模块是否真的完善正确呢

 1,需要做一个登陆授权

 2,将登陆的授权角色传递给需要验证的安全接口,证明此接口需要用户角色信息

 

猜你喜欢

转载自blog.csdn.net/qq_40650378/article/details/82803215