shiro集成jwt如何设置白名单
时间: 2023-07-04 21:22:36 浏览: 233
SpringBoot集成Shiro、Jwt和Redis
要在shiro集成jwt中设置白名单,可以使用shiro的过滤器链进行配置。具体来说,可以在shiro的配置文件中添加一个自定义的过滤器,在该过滤器中实现对白名单的处理。以下是一个简单的示例:
```java
public class JwtFilter extends AuthenticatingFilter {
private List<String> whiteList;
public JwtFilter(List<String> whiteList) {
this.whiteList = whiteList;
}
@Override
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String path = httpRequest.getServletPath();
return whiteList.contains(path);
}
@Override
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
// 处理未授权访问
}
@Override
protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception {
// 创建JwtToken
}
}
```
在上面的示例中,JwtFilter继承自AuthenticatingFilter,实现了isAccessAllowed和onAccessDenied方法。isAccessAllowed方法用于判断当前请求是否在白名单中,如果在白名单中则直接放行,否则进入下一个过滤器。onAccessDenied方法则处理未授权访问的情况。
在shiro的配置文件中,可以将JwtFilter添加到过滤器链中,同时配置白名单:
```xml
<bean id="jwtFilter" class="com.example.JwtFilter">
<constructor-arg>
<list>
<value>/login</value>
<value>/register</value>
</list>
</constructor-arg>
</bean>
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- ... -->
<property name="filters">
<map>
<entry key="jwt" value-ref="jwtFilter"/>
</map>
</property>
<property name="filterChainDefinitions">
<value>
/login = anon
/register = anon
/** = jwt
</value>
</property>
<!-- ... -->
</bean>
```
在上面的配置中,JwtFilter被添加到了过滤器链中,并且配置了白名单。具体来说,/login和/register被配置为匿名访问,其他请求则需要经过JwtFilter进行认证和授权。
阅读全文