Я создаю систему, в которой, если заявка закрыта, появится модальное окно.
Модал попросит пользователя ввести все материалы, использованные в этой заявке.
Полядинамически добавляются, когда пользователь нажимает add row
.
Если пользователь нажимает save
, все значения полей будут сохранены в файле json.
Моя проблема заключается в том, что когда я публикую сообщениефайл json Я не получаю ответа от консоли, сети и apache.
Сначала было отказано в доступе, а метод 405 не разрешен.Я исправил это, и теперь нет ответа.См. Код ниже для справки.
@Override
protected void configure(HttpSecurity http) throws Exception {
System.out.println("###################################### REGISTERED WebSecurityConfiguration:configure");
http
.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.invalidateHttpSession(true)
.permitAll()
.and()
.exceptionHandling().accessDeniedHandler(accessDeniedHandler());
http
.csrf()
.disable();
// .ignoringAntMatchers("/cnr/addMaterialsUsed");
}
Над моей веб-безопасностью я провел исследование, и мне следует отключить csrf, поэтому я сделал.
$('#modalAddMaterialButton').click(function (e) {
var arrayMaterials = [];
var headersMaterials = [];
$('#materialsUsedTable th').each(function (index, item) {
headersMaterials[index] = $(item).html();
});
$('#materialsUsedTable tr').has('td').each(function () {
var arrayItem = {};
$('td input', $(this)).each(function (index, item) {
arrayItem[headersMaterials[index]] = $(item).val();
});
arrayMaterials.push(arrayItem);
});
var materialsUsed = {"myrows": arrayMaterials};
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$.ajax({
beforeSend: function(xhr) {
xhr.setRequestHeader(header, token);
},
type: "POST",
contentType : 'application/json; charset=utf-8',
dataType : 'json',
url: "addMaterialsUsed?ticketNumber="+ticketNumber,
data: JSON.stringify(materialsUsed), // Note it is important
success :function(result) {
// do what ever you want with data
}
});
});
Код вышекогда пользователь нажимает save
, значения формы помещаются внутри json и отправляются.
@RequestMapping(value="/cnr/addMaterialsUsed", method=RequestMethod.POST)
//,consumes="application/json",produces="application/json"
@ResponseBody
@PreAuthorize(value = "hasAnyRole('ADMIN,CWO_ENCODER,DEPT_ENCODER,VIEW_ONLY')")
public ModelAndView saveMaterialsUsed(@RequestBody MaterialsUsed materialsUsed,
@RequestParam(value = "ticketNumber", required = true) String ticketNumber,
ModelMap model, HttpServletRequest request) {
List<String> response = new ArrayList<String>();
for (MaterialUsed materialUsed: materialsUsed.getMaterialUsed()){
LOGGER.debug("MaterialUsed"+materialUsed);
response.add("Saved person: " + materialUsed.toString());
}
return new ModelAndView("redirect:viewEditTicket?ticketNumber=" + ticketNumber);
}
Выше мой контроллер
<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>
Я добавил их внутриhead tag
Я мог бы предоставить другие файлы, которые вам, ребята, нужны, чтобы помочь мне.
TIA за вашу помощь!