2

В настоящее время мы имеем веб-приложение java в середине перехода от Struts 1 к Struts 2. Мы хотели бы настроить заголовки X-Frame-Options и Content-Security-Policy для всех наших действий Struts 2. У нас много действий, и я хочу избегать их изменения отдельно, если это вообще возможно.Как настроить заголовки ответов HTTP в перехватчике Struts2?

идея, которую я в настоящее время является следующий перехватчик, который будет добавлен в стек по умолчанию:

import javax.servlet.http.HttpServletResponse;  
import org.apache.struts2.ServletActionContext;  
import com.opensymphony.xwork2.ActionInvocation; 
import com.opensymphony.xwork2.interceptor.Interceptor; 

public class HttpHeaderInterceptor implements Interceptor { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public void destroy() { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void init() { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public String intercept(ActionInvocation Invocation) throws Exception { 
     HttpServletResponse response = ServletActionContext.getResponse(); 
     response.addHeader("X-Frame-Options", "SAMEORIGIN"); 
     response.addHeader("Content-Security-Policy-Report-Only", "default-src 'self'; script-src 'self' 'unsafe-inline'; object-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self'; media-src 'none'; frame-src 'none'; font-src 'self'; connect-src 'self'; report-uri REDACTED"); 
     response.addHeader("X-Content-Security-Policy-Report-Only", "default-src 'self'; script-src 'self' 'unsafe-inline'; object-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self'; media-src 'none'; frame-src 'none'; font-src 'self'; connect-src 'self'; report-uri REDACTED"); 
     return Invocation.invoke(); 
    } 
} 

Я попытался выше, и он не работает, он не устанавливает заголовки.

Какие изменения необходимо внести, чтобы исправить этот перехватчик? Возможно ли вообще изменить заголовки ответов таким образом?

ответ

1

Правильный способ, чтобы получить ответ (и запрос) внутри перехватчик через InvocationContext, вместо этого через ServletActionContext:

public String intercept(ActionInvocation Invocation) throws Exception { 

    final ActionContext ac = invocation.getInvocationContext(); 
    HttpServletResponse response = (HttpServletResponse) ac.get(StrutsStatics.HTTP_RE‌​SPONSE); 
    //HttpServletResponse response = ServletActionContext.getResponse(); 

    response.addHeader("X-Frame-Options", "SAMEORIGIN"); 
    response.addHeader("Content-Security-Policy-Report-Only", "default-src 'self'; script-src 'self' 'unsafe-inline'; object-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self'; media-src 'none'; frame-src 'none'; font-src 'self'; connect-src 'self'; report-uri REDACTED"); 
    response.addHeader("X-Content-Security-Policy-Report-Only", "default-src 'self'; script-src 'self' 'unsafe-inline'; object-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self'; media-src 'none'; frame-src 'none'; font-src 'self'; connect-src 'self'; report-uri REDACTED"); 
    return Invocation.invoke(); 
} 
+0

Это эквивалентно способ, чтобы получить ответ. –

+0

Я не знаю почему, но я помню, что он ведет себя по-другому; это случилось со мной в прошлом, с другими людьми и с ОП. Я был бы признателен, чтобы узнать больше об этом. Кто угодно ? –

Смежные вопросы