ShiroJwt
v2.0
프런트엔드 주소: https://github.com/wang926454/VueStudy/tree/master/VueStudy08-JWT
궁금한 점이 있으면 코드를 스캔하고 QQ 그룹에 가입하여 소통하세요. 779168604
- 먼저 로그인을 위한 사용자/로그인 에 사용자 이름과 비밀번호를 게시합니다 . 성공하면 암호화된 AccessToken 이 반환됩니다. 실패하면 401 오류가 직접 반환됩니다(계정 또는 비밀번호가 올바르지 않음).
- 향후 방문을 위해 이 AccessToken을 지참하시기 바랍니다.
- 인증 프로세스에서는 주로 Shiro 의 항목 필터 JWTFilter ( BasicHttpAuthenticationFilter )를 다시 작성하여 요청 헤더에 Authorization 필드가 포함되어 있는지 확인합니다.
- 그렇다면 Shiro 의 토큰 로그인 인증 및 권한 부여를 수행합니다(권한이 필요한 모든 사용자 액세스 요청은 AccessToken을 저장하기 위해 헤더 에 Authorization 필드를 추가해야 함). 그렇지 않은 경우 방문자로 직접 액세스를 사용합니다(권한 제어가 있는 경우). , 방문자 액세스가 차단됩니다)
대부분 MD5 + 솔트 (Baidu의 세부 사항) 형식으로 이 문제를 해결합니다. 계정 + 비밀번호 형식으로 비밀번호를 암호화하기 위해 AES-128 + Base64를 사용합니다. .비밀번호 문제
원래 JedisUtil은 사용할 때마다
@Autowired
직접 주입이 가능했는데, Shiro 의 CustomCache를 다시 작성한 후에는 JedisUtil을 주입할 수 없어서 JedisPool 에 정적 주입으로 변경했습니다. 연결 풀 JedisUtil 도구 클래스는 여전히 정적 메서드를 직접 호출합니다.@Autowired
주입이 필요하지 않습니다.
- 로그인 인증이 통과되면 AccessToken 정보가 반환됩니다. ( 현재 타임스탬프와 계좌번호는 AccessToken 에 저장됩니다.)
- 동시에 계정을 키로, 값을 현재 타임스탬프(로그인 시간)로 사용 하여 Redis 에서 RefreshToken을 설정합니다.
- 이제 인증 중에 AccessToken이 만료되지 않아야 하며 해당 RefreshToken이 Redis 에 있어야 하며 RefreshToken 타임스탬프는 인증이 통과되기 전에 AccessToken 정보의 타임스탬프와 일치해야 합니다 . 이를 통해 JWT의 제어 가능성을 달성할 수 있습니다.
- 다시 로그인하여 새 AccessToken을 얻으면 이전 AccessToken을 인증할 수 없습니다. Redis 에 저장된 RefreshToken 타임스탬프 정보는 최근 생성된 AccessToken 정보에 포함된 타임스탬프와만 일치하기 때문입니다. 따라서 각 사용자는 최신 AccessToken 만 사용할 수 있습니다. 인증
- Redis 의 RefreshToken은 사용자가 온라인 상태인지 확인하는 데에도 사용할 수 있습니다. Redis RefreshToken 이 삭제되면 이 RefreshToken 에 해당하는 AccessToken은 더 이상 인증을 통과할 수 없게 됩니다. 이는 사용자의 로그인을 제어하고 사용자를 제거하는 것과 같습니다. .
- AccessToken 자체의 만료 시간은 5분 (구성 파일에서 구성 가능)이고, RefreshToken의 만료 시간은 30분(구성 파일에서 구성 가능)입니다 .
- 로그인 후 5분이 지나면 현재 AccessToken이 만료됩니다. JWT에 액세스하기 위해 다시 AccessToken을 가져오면 TokenExpiredException 예외가 발생하여 토큰이 만료되었음을 나타냅니다.
- AccessToken 새로 고침 여부를 결정하기 시작합니다. Redis는 현재 사용자의 RefreshToken이 있는지 여부 와 이 RefreshToken이 전달하는 타임스탬프가 만료된 AccessToken이 전달하는 타임스탬프 와 일치하는지 여부를 쿼리합니다.
- 존재하고 일관성이 있는 경우 AccessToken을 새로 고치고 만료 시간을 5분(구성 파일에서 구성 가능)으로 설정하고 타임스탬프를 최신 타임스탬프로 설정하고 또한 RefreshToken의 타임스탬프를 최신 타임스탬프로 설정하고 만료를 새로 고칩니다. 다시 30분으로 만료됩니다(구성 파일에서 구성 가능).
- 마지막으로 새로 고쳐진 AccessToken은 응답 헤더의 Authorization 필드에 저장되어 반환됩니다(프런트 엔드는 이를 획득하여 교체하고 다음 번 액세스를 위해 새 AccessToken을 사용합니다).
먼저 srcmainresourcesgeneratorgeneratorConfig.xml 파일을 구성하고(기본 구성은 원래 패키지의 하위 수준에 있는 reverse 패키지에 있음) pom.xml 수준 디렉터리의 명령줄 창에서 실행합니다( 즉, 프로젝트 루트 디렉터리 아래) (mvn이 구성되어 있다는 전제) (Maven 윈도우 플러그인에서 더블클릭하면 IDEA가 직접 실행 가능)
mvn mybatis-generator:generate
先设置Content - Type为application / json
然后填写请求参数帐号密码信息
进行请求访问,请求访问成功
点击查看Header信息的Authorization属性即是Token字段
访问需要权限的请求将Token字段放在Header信息的Authorization属性访问即可
Token的自动刷新也是在Token失效时返回新的Token在Header信息的Authorization属性