gpt4 book ai didi

java - @Value 不注入(inject)属性,保持为空

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:20 25 4
gpt4 key购买 nike

我有一个正在运行的 servlet,我正在尝试将一个属性值注入(inject)到一个过滤器中。

我确信正在加载 appConfig 文件(当我更改文件名时,出现 FileNotFound 异常)。属性文件的计数相同。

我尝试注入(inject)属性的类似乎被 Spring 以某种方式忽略了。它是一个过滤器(见下文)。我已经通过在注释本身中添加属性值来对此进行了试验。 (@Value("${filter.weburl:'some'}")。但是,String webURL 仍然为 NULL。

谁能帮我弄清楚这是怎么回事?

package example.servlet.filters;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@Component
public class AuthenticationFilter implements Filter{

private ServletContext context;
private final Logger LOGGER = LoggerFactory.getLogger(AuthenticationFilter.class);
@Value("${filter.weburl:'some'}")
private String webURL;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.context = filterConfig.getServletContext();
this.context.log("AuthenticationFilter initialized");

}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for (Cookie cookie : cookies) {
System.out.println(cookie.getName() + " " + cookie.getValue() + "\n");
}
} else {
((HttpServletResponse)servletResponse).sendRedirect(webURL + "/inloggen");
}
filterChain.doFilter(servletRequest, servletResponse);
}

@Override
public void destroy() {

}
}

我的 AppConfig 文件:

package example;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;

@Configuration
@ComponentScan("example")
@PropertySource("WEB-INF/service.properties")
public class AppConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}

@Bean
public FilterRegistrationBean authenticationFilterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(getAuthenticationFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.setName("authenticationFilter");
filterRegistrationBean.setOrder(1);
return null;
}

@Bean(name="authenticationFilter")
public AuthenticationFilter getAuthenticationFilter() {
return new AuthenticationFilter();
}
}

最佳答案

您需要在配置类中包含以下内容。

    @Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}

要使用 web.xml 配置过滤器,请执行此操作

<filter>
<filter-name>authenticationFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
<filter-name>authenticationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

关于java - @Value 不注入(inject)属性,保持为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42484044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com