springboot整合shiro jwt
时间: 2023-09-19 14:06:57 浏览: 144
对于Spring Boot整合Shiro JWT,你可以按照以下步骤进行操作:
1. 添加依赖:在你的Spring Boot项目中,添加Shiro和JWT的依赖。可以在`pom.xml`文件中添加以下依赖:
```xml
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-starter</artifactId>
<version>1.8.0-RC2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
```
2. 创建Shiro配置类:创建一个配置类,用于配置Shiro的相关组件。可以在该类中配置Shiro的Realm、Session管理器等。一个简单的示例配置如下:
```java
@Configuration
public class ShiroConfig {
@Bean
public Realm realm() {
return new MyRealm();
}
@Bean
public DefaultWebSecurityManager securityManager(Realm realm) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(realm);
return securityManager;
}
@Bean
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean();
filterFactoryBean.setSecurityManager(securityManager);
// 配置过滤规则
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
// 添加不需要认证的路径,如登录接口等
filterChainDefinitionMap.put("/login", "anon");
// 添加需要认证的路径,如需要登录才能访问的接口等
filterChainDefinitionMap.put("/**", "authc");
filterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return filterFactoryBean;
}
}
```
3. 创建自定义Realm:创建一个自定义的Realm类,用于实现Shiro的认证和授权逻辑。在该类中,你需要处理JWT的验证和解析。一个简单的示例如下:
```java
public class MyRealm extends AuthorizingRealm {
@Override
public boolean supports(AuthenticationToken token) {
return token instanceof JwtToken;
}
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// 处理授权逻辑,如获取用户角色、权限等信息
return null;
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
JwtToken jwtToken = (JwtToken) token;
String jwt = (String) jwtToken.getPrincipal();
// 验证JWT的合法性,如验证签名、过期时间等
// 如果验证通过,可以从JWT中获取用户信息,如用户名、角色等
return new SimpleAuthenticationInfo(jwt, jwt, getName());
}
}
```
4. 创建登录接口:创建一个登录接口,用于验证用户身份并生成JWT。可以使用Spring MVC或其他框架来实现该接口。
```java
@RestController
public class LoginController {
@Autowired
private UserService userService;
@PostMapping("/login")
public String login(@RequestBody LoginDTO loginDTO) {
// 根据用户名和密码验证用户身份,验证通过后生成JWT并返回给客户端
// 可以使用jjwt库来生成JWT
return JwtUtils.generateToken(loginDTO.getUsername());
}
}
```
这样,你就完成了Spring Boot与Shiro JWT的整合。当客户端发送带有JWT的请求时,Shiro会通过自定义的Realm进行验证并授权访问。
请注意,这只是一个简单的示例,实际应用中可能需要根据需求进行更复杂的配置和实现。另外,为了安全起见,建议对JWT进行签名和加密,以防止篡改和泄露敏感信息。
阅读全文