我们可以配置Spring根据请求的范围配置属性吗?

时间:2011-05-09 16:18:28

标签: spring https

我是否可以通过向请求添加属性“isHttps”的方式配置Spring,并且可以从代码中的任何位置访问此属性,例如bean类:

    public class MyItem{
       public String getImageUrl(){
          if (isHttps){
            //return https url 
          }
      //return http url;
       }
    }

我可以使用ThreadLocal来做到这一点,但我想避免走那条路。

2 个答案:

答案 0 :(得分:2)

另一种选择:

您可以按如下方式获取当前请求:

    ServletRequestAttributes sra = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
    HttpServletRequest req = sra.getRequest();     

这使用了本地的线程本地。

如果您正在使用Spring MVC,那就是您所需要的一切。如果您没有使用Spring MVC,那么您需要在web.xml中注册RequestContextListenerRequestContextFilter

答案 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。