Shiro 1.12.0 AccessControlFilter 超时时间设置:解决 Read timed out 错误
在 Shiro 1.12.0 的 AccessControlFilter 的 isAccessAllowed 方法中,我们可以通过配置加大超时时间来解决 'java.net.SocketTimeoutException: Read timed out' 错误。
具体步骤如下:
- 创建一个自定义的 AccessControlFilter 类,继承自 AccessControlFilter,并重写 isAccessAllowed 方法。
public class CustomAccessControlFilter extends AccessControlFilter {
@Override
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
// 设置超时时间为10秒
int timeout = 10000;
// 设置连接超时和读取超时时间
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(timeout)
.setConnectionRequestTimeout(timeout)
.setSocketTimeout(timeout)
.build();
// 创建一个HttpClient对象,并设置超时配置
CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build();
// 创建一个HttpGet请求,并设置请求URL
HttpGet httpGet = new HttpGet('http://example.com');
// 发送请求并获取响应
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
// 处理响应逻辑
// ...
return true;
}
}
- 在 Shiro 配置文件中,将自定义的 AccessControlFilter 类添加到 filterChainDefinitions 中。
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- ... -->
<property name="filterChainDefinitions">
<value>
/path/to/protected/resource = customAccessControlFilter
/** = authc
</value>
</property>
<!-- ... -->
</bean>
<bean id="customAccessControlFilter" class="com.example.CustomAccessControlFilter" />
这样就可以在 AccessControlFilter 的 isAccessAllowed 方法中配置加大超时时间了。记得根据你的需求调整超时时间的值。
原文地址: https://www.cveoy.top/t/topic/qEEY 著作权归作者所有。请勿转载和采集!