问题描述
DB那边已经能抽到对应page的列表了,但是对page值的安全问题有点困惑:1.总页数和请求过来的page值的比较(action和service层都是单例,用全局变量定义个pager肯定违反了单例),这样就无法比较请求过来时的page和总页数了<-----我考虑到别人捣乱的情况,直接在地址栏输入过大的page,不知道怎么解决2.用struts接收参数page,如果请求中的参数被别人在地址栏弄个字符串,struts接收参数,因为类型不是Integer,直接报错感谢各位大神回答
解决方案
解决方案二:
1大于总pagepage=最大页码2前台或后台校验输入页码如果不是正整数页码=当前页码
解决方案三:
顶一下一楼的,不知道怎么顶。另外,如果你要精确表示分页,也就是一共有多少页,多查一次数据库肯定是必须的,除非你模糊分页,不说明一共有多少页,这样可以拿一个数去试一下,如果取不到值,就是到尾页了。
解决方案四:
引用1楼cbxjj的回复:
1大于总pagepage=最大页码2前台或后台校验输入页码如果不是正整数页码=当前页码
哥么你这处理方式我也知道,总page你怎么拿?每次都去查?我指的是地址栏里后面跟上不规范的页码值,比如?page="aa",等你后台获取page值,已经报错了,因为我setPage参数设的是Intger而不是String
解决方案五:
引用2楼arkwrightzhn的回复:
顶一下一楼的,不知道怎么顶。另外,如果你要精确表示分页,也就是一共有多少页,多查一次数据库肯定是必须的,除非你模糊分页,不说明一共有多少页,这样可以拿一个数去试一下,如果取不到值,就是到尾页了。
前台显示没问题的,而且有总页数,我问的是,地址栏输入的page值和总page值比较,总page值除了用全局变量保存,用来下一次和page值比较,还可以用什么方式来和page值比较
解决方案六:
引用4楼leifuchild的回复:
Quote: 引用2楼arkwrightzhn的回复:
顶一下一楼的,不知道怎么顶。另外,如果你要精确表示分页,也就是一共有多少页,多查一次数据库肯定是必须的,除非你模糊分页,不说明一共有多少页,这样可以拿一个数去试一下,如果取不到值,就是到尾页了。前台显示没问题的,而且有总页数,我问的是,地址栏输入的page值和总page值比较,总page值除了用全局变量保存,用来下一次和page值比较,还可以用什么方式来和page值比较
因为数据库里总条数,或者说满足某次检索条件的总条数是不断变化的,因此不可能保存全局变量。通常的做法是:接收参数是page和pageSize,即请求第几页,每页多少条,当然,这两个数是不是整数的判断肯定是一开始就判断了的。然后接下来要做的是:查询数据库,得到总条数totalCount,然后根据totalCount来调整page值,如果page>totalPage,page=totalPage,这里的totalPage是根据总条数和pageSize计算出来的,如果能整除,totalPage=totalCount/pageSize,如果不能整除,totalPage=totalCount/pageSize+1;然后再用调整后的page和pageSize再次检索数据库,得到想要的结果集。
解决方案七:
你考虑的很周全前台传过来的page在后台可以进行解析如果在字符串或者什么的就直接抛出异常或者指定到第一页如果page值过大就取最后一页
解决方案八:
如果你怕别人从地址栏人为更改你可以使用ajax至于你刚才说的“前台显示没问题的,而且有总页数,我问的是,地址栏输入的page值和总page值比较,总page值除了用全局变量保存,用来下一次和page值比较,还可以用什么方式来和page值比较”你可以吧总页数传到前面每次下一页的时候进行比较
解决方案九:
引用7楼u013112641的回复:
如果你怕别人从地址栏人为更改你可以使用ajax至于你刚才说的“前台显示没问题的,而且有总页数,我问的是,地址栏输入的page值和总page值比较,总page值除了用全局变量保存,用来下一次和page值比较,还可以用什么方式来和page值比较”你可以吧总页数传到前面每次下一页的时候进行比较
引用5楼arkwrightzhn的回复:
Quote: 引用4楼leifuchild的回复:
Quote: 引用2楼arkwrightzhn的回复:
顶一下一楼的,不知道怎么顶。另外,如果你要精确表示分页,也就是一共有多少页,多查一次数据库肯定是必须的,除非你模糊分页,不说明一共有多少页,这样可以拿一个数去试一下,如果取不到值,就是到尾页了。前台显示没问题的,而且有总页数,我问的是,地址栏输入的page值和总page值比较,总page值除了用全局变量保存,用来下一次和page值比较,还可以用什么方式来和page值比较
因为数据库里总条数,或者说满足某次检索条件的总条数是不断变化的,因此不可能保存全局变量。通常的做法是:接收参数是page和pageSize,即请求第几页,每页多少条,当然,这两个数是不是整数的判断肯定是一开始就判断了的。然后接下来要做的是:查询数据库,得到总条数totalCount,然后根据totalCount来调整page值,如果page>totalPage,page=totalPage,这里的totalPage是根据总条数和pageSize计算出来的,如果能整除,totalPage=totalCount/pageSize,如果不能整除,totalPage=totalCount/pageSize+1;然后再用调整后的page和pageSize再次检索数据库,得到想要的结果集。
嗯,这流程我以前玩过,看来还得每次查totalPages来比较新传进来的page值,打算用struts拦截器禁止地址栏编辑内容来解决胡乱输入页码的问题,谢谢啦