Я следил за этим ответом Балуса C, чтобы попытаться загрузить файл на сервер. Я использую его код как есть.
При использовании JSF 2.2 значение #{bean.save}
никогда не было достигнуто, и файл никогда не сохранялся.
Консоль сервера ничего не показала. Но консоль js показала эту ошибку:
Refused to display 'http://localhost:8080/my_app/hello.xhtml' in a frame because it set 'X-Frame-Options' to 'deny'.
jsf.js.xhtml?ln=javax.faces:1 Uncaught DOMException: Blocked a frame with origin "http://localhost:8080" from accessing a cross-origin frame.
at FrameTransport.callback (http://localhost:8080/my_app/javax.faces.resource/jsf.js.xhtml?ln=javax.faces:1:5109)
at HTMLIFrameElement.<anonymous> (http://localhost:8080/my_app/javax.faces.resource/jsf.js.xhtml?ln=javax.faces:1:5759)
Я видел этот ответ , который предполагал, что это ошибка в JSF 2.2. Поэтому я загрузил в 2.3.
С JSF 2.3 достигается #{bean.save}
, и файл успешно сохраняется. Но ошибка js остается, и я не могу загрузить второй файл.
Есть идеи?
РЕДАКТИРОВАТЬ , если это поможет: я не Не знаю почему, но после выбора файла для загрузки в диалоговом окне на мою страницу каким-то образом добавляется <iframe>
.
РЕДАКТИРОВАТЬ 2
Балус C и Селарон предложили мне попытаться изменить заголовок X-Frame-Options на «DENY». Я попытался добавить @WebFilter
и установить там заголовок, например:
public void doFilter(...)
{
HttpServletResponse response = (HttpServletResponse) res;
response.addHeader("X-Frame-Options", "sameorigin");
response.setHeader("MyHeader", "whatever");
chain.doFilter(req, res);
}
Я добавил второй заголовок MyHeader со значением «что угодно», чтобы проверить, содержал ли ответ этот заголовок при переходе в браузер.
Оказывается, MyHeader правильно попадает в браузер, но X-Frame-Options по-прежнему остается «DENY».
Поскольку я использую Spring Security, я подумал, что возможно какой-то другой фильтр мешает моему ответу?
Итак, у меня есть это:
@Configuration
@EnableWebSecurity
public class BasicConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
...
http.addFilterAfter(
new CustomFilter(), SwitchUserFilter.class);
...
}
}
Мой CustomFilter
работает как предыдущий, который я показал: MyHeader остается, но X-Frame-Options не делает.
Я добавил его после SwitchUserFilter
, потому что do c для HttpSecurity.addFilter
говорит, что это последний фильтр в цепочке.
Я немного растерялся сейчас. Моя пара вопросов:
Правильно ли я предполагаю, что заголовок X-Frame-Options перезаписывается каким-либо другим фильтром?
Как Могу ли я убедиться, что оставленные мной параметры X-Frame остаются? Или, как я могу поставить свой фильтр в конце цепи?