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

发布于 2024-11-05 15:43:45 字数 310 浏览 0 评论 0原文

我可以通过在请求中添加一个属性“isHttps”来配置 Spring,并且可以从代码中的任何位置访问该属性,例如 bean 类:

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

我可以使用 ThreadLocal 来执行此操作,但我想避免走那条路。

Can I configure Spring in such a way that I add a property, "isHttps" to the request, and this property can be accessed from anywhere in the code, e.g. a bean class:

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

I can do this using ThreadLocal, but I would like to avoid taking that route.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谎言 2024-11-12 15:43:45

另一种选择:

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

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

这在幕后使用线程本地。

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

Another alternative:

You can get the current request as follows:

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

This uses thread-local under the covers.

If you are using Spring MVC that's all you need. If you are not using Spring MVC then you will need to register a RequestContextListener or RequestContextFilter in your web.xml.

゛时过境迁 2024-11-12 15:43:45

创建一个请求范围的 bean

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

然后在该类中,自动装配请求(参考 这里):

@Autowired
private HttpServletRequest request;

在RequestBean中添加一个方法来判断请求是否是HTTPS。

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

然后将 requestBean 注入到需要调用 isHttp() 的其他 bean 中。

Create a request-scoped bean

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

Then in that class, autowire the request (reference here):

@Autowired
private HttpServletRequest request;

Add a method in RequestBean that determines if the request is HTTPS.

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

Then inject requestBean into your other beans that need to call isHttp().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文