2011-05-09 86 views
0

我可以如何配置Spring,以便爲請求添加屬性「isHttps」,並且可以從代碼中的任何位置訪問此屬性,例如,豆類:我們可以配置Spring根據請求的範圍來配置屬性嗎?

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

我可以使用ThreadLocal做到這一點,但我想避免採取該路線。

+1

什麼樣的要求?一個'HttpServletRequest'? – skaffman 2011-05-09 16:19:39

回答

2

另一種選擇:

你可以得到當前請求如下:

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

這在幕後使用線程本地。

如果您正在使用Spring MVC,那就是您所需要的。如果您不使用Spring MVC,那麼您需要在web.xml中註冊RequestContextListenerRequestContextFilter

1

在該類創建請求範圍豆

<bean id="requestBean" class="com.foo.RequestBean" scope="request"/> 

然後,自動裝配的請求(參照here):

@Autowired 
private HttpServletRequest request; 

添加在RequestBean了一種方法,確定該請求是HTTPS。

public boolean isHttp() { // ... } 

然後將requestBean注入到其他需要調用isHttp()的bean中。

+0

我們是否可以將一個類自動裝入一個不是由Spring創建的bean中。例如,MyItem可以從多個類創建,並且當創建MyItem類時,我不能總是傳入此requestBean。 – njdeveloper 2011-05-10 08:03:52

+0

是的,看到這個答案:http://stackoverflow.com/questions/3813588/how-to-inject-dependencies-into-a-self-instantiated-object-in-spring。 – sourcedelica 2011-05-10 15:51:31

+1

我發佈了另一個更可取的解決方案。 – sourcedelica 2011-05-10 16:18:58

相關問題