Ich habe ein Servlet ausgeführt und versuche einen Eigenschaftswert in einen Filter zu injizieren.@Value injiziert keine Eigenschaft, bleibt null
Ich bin zuversichtlich, dass die AppConfig-Datei geladen wird (wenn ich den Dateinamen ändern, erhalte ich eine FileNotFound-Ausnahme). Gleiche Anzahl für die Eigenschaftendatei.
Es scheint die Klasse, in der ich versuche, die Eigenschaft zu injizieren, wird von Spring irgendwie ignoriert. Es ist ein Filter (siehe unten). Ich habe damit experimentiert, indem ich den Eigenschaftswert in die Annotation selbst eingefügt habe. (@Value ("$ {filter.weburl: 'einige'}"). Allerdings bleibt der String WebUrl NULL
Kann mir jemand helfen, herauszufinden, was hier vor sich geht
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() {
}
}
Meine.? AppConfig Datei:
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();
}
}
Ihr Filter ist auch tatsächlich eine Feder Bohne? Grundsätzlich kann das Feld nicht 'null' sein, wenn es nicht aufgelöst werden kann, wird es auf den von Ihnen angegebenen Standard zurückgreifen. Aufgrund der Tatsache, dass dies nicht der Fall ist, bezweifle ich, dass die von Ihnen verwendete Instanz des Filters eine von Spring bekannte Instanz ist. –
Haben Sie versucht, die Felder, die mit @Value gefüllt werden sollen, öffentlich zu setzen? –