ruoyi token认证过程
时间: 2023-09-30 20:09:19 浏览: 143
在 Ruoyi 后台管理系统中,token 的认证过程如下:
1. 前端在请求头中携带 access_token。
2. 后端接收到请求后,从请求头中获取 access_token。
3. 后端通过 JWT 解析 access_token,获取其中的用户信息。
4. 后端使用该用户信息进行权限认证,判断该用户是否有权限访问该接口。
5. 如果用户有权限访问该接口,则返回相应的数据;否则返回错误信息。
简单来说,就是通过 JWT 解析 access_token 获取用户信息,并使用该用户信息进行权限认证。如果用户的身份和权限符合要求,则允许访问接口;否则拒绝访问。这一过程可以通过 Spring Security 等安全框架来实现。
相关问题
ruoyi jwt认证
ruoyi是一个开源的Java框架,提供了一套快速开发管理系统的解决方案。在ruoyi框架中,可以使用JWT(JSON Web Token)进行身份认证。
JWT是一种规范,不与特定的编程语言绑定在一起。在ruoyi框架中,常用的Java实现是jjwt项目,它是一个开源项目,可以在GitHub上找到它的源代码。
要在ruoyi框架中使用JWT,首先需要在项目的pom.xml文件中添加JWT依赖项。可以通过添加如下代码来引入java-jwt依赖:
```xml
<!-- jwt jar -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
```
接下来,可以通过在ruoyi框架中增加JWT登录方法来实现JWT认证。通常,可以使用一个名为JwtAuthenticationTokenFilter的认证过滤器来处理认证逻辑。
该过滤器继承自OncePerRequestFilter类,表示它只会过滤一次。在该过滤器中,可以实现JWT的验证逻辑,包括解析和验证JWT,获取用户信息等。
通过在ruoyi框架中实现JWT认证,可以实现基于JWT的身份认证和授权机制,提供更安全、可靠的权限管理功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [若依管理系统自学笔记二:JWT](https://blog.csdn.net/HDUCheater/article/details/119141978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [若依集成jwt实现登录授权访问(单体版)](https://blog.csdn.net/qq_19309473/article/details/123650385)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
ruoyi集成oauth2
Ruoyi 后台管理系统可以集成 OAuth2,实现授权登录功能。具体实现步骤如下:
1. 引入相关依赖
在 pom.xml 文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
```
2. 配置 OAuth2
在 application.yml 文件中添加 OAuth2 的配置,例如:
```yaml
spring:
security:
oauth2:
client:
client-id: client_id
client-secret: client_secret
access-token-uri: http://localhost:8080/oauth/token
user-authorization-uri: http://localhost:8080/oauth/authorize
scope: read,write
redirect-uri: http://localhost:8081/login/oauth2/code/myapp
resource:
user-info-uri: http://localhost:8080/user/me
```
其中,client-id 和 client-secret 是在 OAuth2 服务端注册应用时分配的,access-token-uri 是获取访问令牌的接口,user-authorization-uri 是授权页面的地址,scope 是授权的权限范围,redirect-uri 是授权后重定向的地址,user-info-uri 是获取用户信息的接口。
3. 配置 Spring Security
在 WebSecurityConfig 类中添加 OAuth2 相关的配置:
```java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.loginPage("/login")
.defaultSuccessURL("/home")
.permitAll();
}
}
```
这里配置了一个登录页面和默认的登录成功后的跳转地址,其他请求都需要进行身份认证。
4. 实现自定义用户信息服务
在 UserInfoServiceImpl 类中实现获取用户信息的方法:
```java
@Service
public class UserInfoServiceImpl implements UserInfoService {
@Override
public UserInfo getUserInfo(String accessToken) {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Bearer " + accessToken);
HttpEntity<String> entity = new HttpEntity<>("", headers);
ResponseEntity<UserInfo> response = restTemplate.exchange(
"http://localhost:8080/user/me", HttpMethod.GET, entity, UserInfo.class);
return response.getBody();
}
}
```
其中,getUserInfo 方法通过访问 user-info-uri 接口获取用户信息。
5. 集成 OAuth2
在 Ruoyi 系统中,可以通过集成 Spring Security OAuth2 实现授权登录功能。具体步骤如下:
- 在 pom.xml 文件中添加 Spring Security OAuth2 相关依赖:
```xml
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
```
- 在 application.yml 文件中配置 OAuth2:
```yaml
spring:
security:
oauth2:
client:
client-id: client_id
client-secret: client_secret
access-token-uri: http://localhost:8080/oauth/token
user-authorization-uri: http://localhost:8080/oauth/authorize
scope: read,write
redirect-uri: http://localhost:8081/login/oauth2/code/myapp
resource:
user-info-uri: http://localhost:8080/user/me
```
- 在 WebSecurityConfig 类中配置 OAuth2:
```java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserInfoServiceImpl userInfoService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.userInfoEndpoint()
.userService(userInfoService)
.and()
.loginPage("/login")
.defaultSuccessURL("/home")
.permitAll();
}
}
```
- 在 UserInfoServiceImpl 类中实现获取用户信息的方法:
```java
@Service
public class UserInfoServiceImpl implements UserInfoService {
@Override
public UserInfo loadUserByUsername(String username) throws UsernameNotFoundException {
// TODO: 根据用户名查询用户信息
return null;
}
@Override
public UserInfo getUserInfo(OAuth2User oAuth2User) {
Map<String, Object> attributes = oAuth2User.getAttributes();
// TODO: 解析用户信息
UserInfo userInfo = new UserInfo();
return userInfo;
}
}
```
其中,getUserInfo 方法需要解析 OAuth2User 中的用户信息,并将其转换为 UserInfo 对象返回。可以根据具体的业务需求,实现自定义的用户信息服务。
阅读全文