我有一个Controller类,它有以下两种查找医生的方法(上下文改变了)。获取质量分配:两种方法上的不安全绑定器配置(API滥用、结构化)错误。
@Controller
@RequestMapping(value = "/findDocSearch")
public class Controller {
@Autowired
private IFindDocService findDocService;
@RequestMapping(value = "/byName", method = RequestMethod.GET)
@ResponseBody
public List<FindDocDTO> findDocByName(FindDocBean bean) {
return findDocService.retrieveDocByName(bean.getName());
}
@RequestMapping(value = "/byLoc", method = RequestMethod.GET)
@ResponseBody
public List<FindDocDTO> findDocByLocation(FindDocBean bean) {
return findDocService.retrieveDocByZipCode(bean.getZipcode(),
bean.getDistance());
}
}我的豆是:
public class FindDocBean implements Serializable {
private static final long serialVersionUID = -1212xxxL;
private String name;
private String zipcode;
private int distance;
@Override
public String toString() {
return String.format("FindDocBean[name: %s, zipcode:%s, distance:%s]",
name, zipcode, distance);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public int getDistance() {
return distance;
}
public void setDistance(int distance) {
this.distance = distance;
}根据到目前为止发现的所有建议,他们建议只使用以下所需的参数来限制bean:
final String[] DISALLOWED_FIELDS = new String[]{"bean.name", "bean.zipcode", };
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields(DISALLOWED_FIELDS);但我的问题是,bean的所有3个参数都将用于提供给Controller的任何一种方法。
有人能为这个问题提出一些解决方案吗。提前谢谢。
发布于 2018-01-02 16:17:02
InitBinder可以用于方法。你可以试试这个。
@InitBinder("findDocByName")
public void initBinderByName(WebDataBinder binder) {
binder.setDisallowedFields(new String[]{"distance","zipcode"});
}
@InitBinder("findDocByLocation")
public void initBinderByZipCode(WebDataBinder binder) {
binder.setDisallowedFields(new String[]{"distance","name"});
}发布于 2018-02-05 14:55:42
我面临着同样的问题,然后在同一个rest控制器类中添加了下面的代码:
@InitBinder
public void populateCustomerRequest(WebDataBinder binder) {
binder.setDisallowedFields(new String[]{});
}现在它的工作对我和大规模分配问题是固定的。
发布于 2017-12-27 21:32:57
简单的问题-映射程序如何实例化bean?这里是答案/示例。您可以通过query parameter或header传递该数据。然而,这将是奇怪的。更好的做法是使用@QueryParam提供位置或名称的方法。这样,保护应用程序就更容易了。
顺便提一句,查询的长度是有限的,所以如果您的搜索表单又大又奇怪,@POST可能是个好主意,这样您就可以传递所有的数据。对于这个简单的例子,这将是过头的。
https://stackoverflow.com/questions/47945383
复制相似问题