您的位置:首页 > 其它

后台分页的页码安全(超过总页数,页码为非数字)检查问题

2017-06-29 21:35 435 查看
后台分页的页码安全(超过总页数,页码为非数字)检查问题

解决办法使用校验器:

如果页码没大于接收页码参数类型的最大值,但是页码大于总页数。

就在业务层进行判断

// 如果当前页大于总页数,那么就把最后一页的就是当前页
if (page > pageBean.getTotalPage()) {
page = pageBean.getTotalPage();
pageBean.setPage(page);
}
if (page <= 0) {
page = 1;
pageBean.setPage(page);
}

如果当页码小于等于0并且是负数,那么就把当前页设置为第一页

// 如果当页码小于等于0并且是负数,那么就把当前页设置为第一页
if (page <= 0) {
page = 1;
pageBean.setPage(page);
}

       如果页码为非数字,使用数据校验及类型转换器(我这是数校验并跳转到提示页面)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="page">
<field-validator type="conversion">
<message key="你输入的是无效的页码" />
</field-validator>
</field>
</validators>


完整代码

实体:

package cn.dental.domain;

/**
* 用户实体类
*
* @author 吕小刚
* @version V1.0
*/
public class User {
private Long id;//编号,统一long类型
private String name;//姓名

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}


分页实体:

package cn.dental.utils;

import java.util.ArrayList;
import java.util.List;

/**
* 分页查询
*
* @author 吕小刚
* @version V1.0
* @param <T>
*/
public class PageBean<T> {
/** 当前页 */
private Integer page;

/** 每页显示/条数 */
private Integer limit;

/** 总页数 */
private Integer totalPage;

/** 总记录数 */
private Long totalCount;

/** 分页查询集合数据 */
private List<T> pageList = new ArrayList<T>();

// =============== getXxx()/setXxx()
/**
* 获取:当前页
*/
public Integer getPage() {
return page;
}

/** 设置:当前页 */
public void setPage(Integer page) {
this.page = page;
}

/** 获取:每页显示/条数 */
public Integer getLimit() {
return limit;
}

/** 设置:每页显示/条数 */
public void setLimit(Integer limit) {
this.limit = limit;
}

/** 获取:总页数 */
public Integer getTotalPage() {
return totalPage;
}

/** 设置:总页数 */
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}

/** 获取:总记录数 */
public Long getTotalCount() {
return totalCount;
}

/** 设置:总记录数 */
public void setTotalCount(Long totalCount) {
this.totalCount = totalCount;
}

/** 获取:分页查询集合数据 */
public List<T> getPageList() {
return pageList;
}

/** 设置:分页查询集合数据 */
public void setPageList(List<T> pageList) {
this.pageList = pageList;
}

}


Dao层

package cn.dental.dao;

import java.util.List;

import cn.dental.domain.User;

/**
* User持久层接口
*
* @author 吕小刚
* @version V1.0
*/
public interface UserDao {
/**
* 查询所有用户信息
*
* @return 返回用户
*/
public List<User> findAll();

/**
* 分页查询
*
* @param page
*            页码(当前页)
* @param limit
*            每页显示条数
* @return 返回分页查询出来的数据
*/
public List<User> findAll(Integer page, Integer limit);

/** 查询总记录数 */
public Long findCount();
}


package cn.dental.dao.impl;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;

import cn.dental.dao.UserDao;
import cn.dental.domain.User;

/**
* User持久层实现类
*
* @author 吕小刚
* @version V1.0
*/
@Repository("userDaoImpl")
@SuppressWarnings("unchecked")
public class UserDaoImpl implements UserDao {
@Resource
private SessionFactory sessionFactory;

protected Session getSession() {
return sessionFactory.getCurrentSession();
}

public List<User> findAll() {
return getSession().createQuery("from User u").list();
}

public List<User> findAll(Integer page, Integer limit) {
if (page == null) {
return null;
}
List<User> list = getSession().createQuery(//
"from User u")//
.setFirstResult(page)//
.setMaxResults(limit)//
.list();
if (list != null && list.size() > 0) {
return list;
}
return null;
}

public Long findCount() {
Long count = (Long) getSession().createQuery(//
"select count(u) from User u")//
.uniqueResult();
if (count != null) {
return count;
}
return null;
}
}


Service层

package cn.dental.service;

import java.util.List;

import cn.dental.domain.User;
import cn.dental.utils.PageBean;

/**
* User服务层接口
*
* @author 吕小刚
* @version V1.0
*/
public interface UserService {
/** 查询所有用户信息 */
public List<User> findAll();

/**
* * 分页查询
*
* @param page
*            页码(当前页)
* @param limit
*            每页显示条数
* @return 返回分页查询出来的数据集合
*/
public PageBean<User> findAll(Integer page);
}


Action层

package cn.dental.action;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import cn.dental.domain.User;
import cn.dental.service.UserService;
import cn.dental.utils.PageBean;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/**
* User的Action类
*
* @author 吕小刚
* @version V1.0
*
*/
@SuppressWarnings("serial")
@Controller("userAction")
@Scope("prototype")
public class UserAction extends ActionSupport implements ModelDriven<User> {
// =================== Service实例
@Resource
private UserService userService;

// =================== 创建模型驱动对象
private User model = new User();
private int page;// 接收页码

public User getModel() {
return model;
}

public Integer getPage() {
return page;
}

public void setPage(Integer page) {
this.page = page;
}

// =================== Action处理方法
/** 查询所有信息 */
public String findAll() {
// List<User> userList = userService.findAll();
PageBean<User> pageBeanUser = userService.findAll(page);
// ActionContext.getContext().getValueStack().set("userList", userList);
ActionContext.getContext().getValueStack().set("pageBeanUser", pageBeanUser);
return "findAll";
}

}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="page">
<field-validator type="conversion">
<message key="你输入的是无效的页码" />
</field-validator>
</field>
</validators>


jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>分页查询</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

</head>

<body>
<div align="center">
<table border="1">
<tr>
<td>编号</td>
<td>姓名</td>
</tr>
<s:iterator var="pageBeanUserList" value="pageBeanUser.pageList">
<tr>
<td><s:property value="#pageBeanUserList.id" />
</td>
<td><s:property value="#pageBeanUserList.name" /></td>
</tr>
</s:iterator>
</table>
<p>
第
<s:property value="pageBeanUser.page" />
/共
<s:property value="pageBeanUser.totalPage" />
页
</p>
<form action="user_findAll.action?page=${page}" enctype="multipart/form-data" method="post">
<input type="text" name="page" value="">
<input type="submit" value="添加"/>
</form>
</div>
</body>
</html>

<%@page import="com.opensymphony.xwork2.ActionContext"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>错误提示</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

</head>

<body>
<h1>错误</h1>
<!-- 数据校验提示 -->
<s:fielderror fieldName="page"/>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐