ruoyi集成oauth2
时间: 2023-09-30 12:01:46 浏览: 219
RuoYi-activiti
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 对象返回。可以根据具体的业务需求,实现自定义的用户信息服务。
阅读全文