我是否可以通过向请求添加属性“isHttps”的方式配置Spring,并且可以从代码中的任何位置访问此属性,例如bean类:
public class MyItem{
public String getImageUrl(){
if (isHttps){
//return https url
}
//return http url;
}
}
我可以使用ThreadLocal来做到这一点,但我想避免走那条路。
答案 0 :(得分:2)
另一种选择:
您可以按如下方式获取当前请求:
ServletRequestAttributes sra = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest req = sra.getRequest();
这使用了本地的线程本地。
如果您正在使用Spring MVC,那就是您所需要的一切。如果您没有使用Spring MVC,那么您需要在web.xml
中注册RequestContextListener或RequestContextFilter。
答案 1 :(得分:1)
创建一个请求范围的bean
<bean id="requestBean" class="com.foo.RequestBean" scope="request"/>
然后在该课程中,自动发送请求(参考here):
@Autowired
private HttpServletRequest request;
在RequestBean中添加一个方法,用于确定请求是否为HTTPS。
public boolean isHttp() { // ... }
然后将requestBean注入需要调用isHttp()的其他bean。