在spring mvc中隐藏url字符串

时间:2015-03-11 20:26:33

标签: spring spring-mvc spring-security

如何隐藏spring mvc web应用中url字符串中使用的字段值?

例如,如果我想将recordID = 1的记录发送到视图中,我会给用户一个带有以下URL的超链接:

https://myapp.com/urlpattern?recordID=1  

正如您所看到的,这不仅暴露了recordID=1,还诱使恶意用户开始输入其他数字以挖掘其他记录,例如recordID=5recordID=9

spring框架或spring安全性是否有内置的加密url字符串的方法?或者我是否需要使用hibernate更改底层数据库中的id值?

上述网址格式的控制器代码为:

@RequestMapping(value = "/urlpattern", method = RequestMethod.GET)
public String processUrlPattern(@RequestParam("recordID") String recordId, 
  HttpServletRequest request, BindingResult result, Map<String, Object> model) {

    Long recId = Long.valueOf(recordId).longValue();
    RecordObject sel_record = this.appService.findRecordById(recId);
    model.put("sel_record", sel_record);
    return "foldername/jspname";
}

请注意,应用中的所有实体都从相同的BaseEntity继承,其生成代码的代码如下:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@DiscriminatorFormula("(CASE WHEN dtype IS NULL THEN 'BaseEntity' ELSE dtype END)")
@org.hibernate.annotations.DiscriminatorOptions(force=true)
public abstract class BaseEntity {

    @Transient
    private String dtype = this.getClass().getSimpleName();

    @Id 
    @GeneratedValue(strategy=GenerationType.TABLE, generator="TBL_GEN")
    @TableGenerator(
        name="TBL_GEN",
        table="GENERATOR_TABLE",
        pkColumnName = "mykey",
        valueColumnName = "hi",
        pkColumnValue="id",
        allocationSize=20
    )
    protected Integer id;

    //other stuff
}  

注意:使用Spring安全性对所有用户进行身份验证/授权。但是,数据非常敏感,重要的是没有人能够操纵url字符串。

1 个答案:

答案 0 :(得分:1)

使用HDIV,它开箱即用:

http://hdiv.org/hdiv-documentation-single/doc.html

“A6(敏感数据暴露):HDIV为服务器端生成的所有数据提供了机密性。也就是说,HDIV用相对值替换服务器端生成的原始参数值(0,1,2,4,避免将关键数据暴露给客户端。“