閿欒鎻忚堪:
org.directwebremoting.dwrp.BaseDwrpHandler - A request has been denied as a potential CSRF attack.
org.directwebremoting.dwrp.BaseCallHandler - Exception while processing batch
java.lang.SecurityException: CSRF Security Error
at org.directwebremoting.dwrp.BaseDwrpHandler.checkNotCsrfAttack(BaseDwrpHandler.java:85)
at org.directwebremoting.dwrp.BaseCallHandler.handle(BaseCallHandler.java:76)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:120)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:141)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process (Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
瑙e喅鍔炴硶:
淇敼 web.xml 涓?DWR 閰嶇疆淇℃伅
鍘?
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
鍔犲叆璺ㄥ煙璋冪敤閰嶇疆淇℃伅(綰㈣壊閮ㄥ垎)錛屼慨鏀逛負:
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>allowScriptTagRemoting</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
鎴戝垰榪涘叆閲戣瀺琛屼笟鏃訛紝灝辯煡閬撲簡IS08583鎶ユ枃鍗忚錛屾垜鎯沖彲鑳芥垜榪樻病榪涘叆榪欎釜琛屼笟閮藉凡緇忓惉榪囦簡錛屽彲鐭SO8583鐨勫獎鍝嶅姏鏈夊澶т簡銆傛渶鍒濆垰鎺ヨЕ瀹冩椂錛岀‘瀹炲鍏朵腑鐨勪竴浜涚粏鑺傛蹇典笉鏄緢娓呮櫚錛屽鏈変簺鍦版柟姣旇緝榪鋒儜銆傞壌浜庢錛屾垜鎯沖緢澶氬悓琛屼篃蹇呯劧浼氱粡鍘嗗悓鏍峰緱闃舵錛屾墍浠ユ垜鍐欎笅鏈枃錛屼互渚垮ぇ瀹惰兘澶熷皯璧頒竴浜涘集璺傚悓鏃訛紝鎴戝湪緗戜笂錛?/span> http://blog.csdn.net/lysheng/archiv.../03/309914.aspx 錛夊啓涓嬫垜瑕佸啓“鍏ㄩ潰鎺屾彙ISO8583鎶ユ枃”鍜?#8220;絎﹀悎CEN/XFS錛堝嵆WOSA/XFS錛夎鑼冪殑SP緙栧啓”涓ょ瘒鏂囩珷鏃訛紝寰堝浜洪兘璇㈤棶鎴戜粈涔堟椂鍊欒兘澶熷啓鍑烘潵錛屽彲鐭ヨ澶氫漢鏄渶瑕佷簡瑙h繖鏂歸潰鐨勭煡璇嗙殑錛屽嵆浣挎垜鏃墮棿涓嶆槸寰堝錛屼篃寰楀敖閲忓皢榪欎袱綃囨枃绔犲啓鍑烘潵錛岀粰闇瑕佺殑浜烘彁渚涗竴浜涘弬鑰冦?br />
濡傛灉鍗曠函鐨勮IS08583閭d簺瀛楁鐨勫畾涔夛紝鎴戣寰楁病鏈変粈涔堟剰鎬濓紝鏍囧噯涓凡緇忓姣忎釜瀛楁瑙i噴鐨勯潪甯歌緇嗕簡錛屽鏋滀綘瑙夊緱鐞嗚В鑻辨枃鐗堢殑ISO8583瑙勮寖鏈変簺鍥伴毦錛岀綉涓婁篃鏈夊悓琛屼負鎴戜滑緲昏瘧濂界殑涓枃鐗圛SO8583瑙勮寖錛屾墍浠ユ垜鐨勭洰鐨勬槸杈懼埌闃呰鏈枃鍚庤兘澶熷ISO8583鐭ュ叾鐒訛紝浜︾煡鍏舵墍浠ョ劧錛屼嬌浠ュ墠鍩烘湰娌℃湁鎺ヨЕ瀹冪殑浜轟篃鑳藉杈懼埌鎺屾彙ISO8583鎶ユ枃瑙勮寖銆?/span>
榪戞湡鍦ㄥ仛鐨凷2SH欏圭洰錛屽洜涓哄澶勭敤鍒板垎欏碉紝BOSS瑕佹眰灝忓紵灝嗗叾鎶借薄鍑烘潵銆傚皬寮熶笉鎵嶏紝瀹為檯鍙備笌寮鍙戠殑緇忛獙涔熷氨1騫淬?br /> 浜庢槸鑺變簡鐐規(guī)椂闂村皢鍏跺仛鎴愯嚜瀹氫箟鏍囩渚涙墍鏈夐渶瑕佸垎欏電殑涓氬姟璋冪敤銆傚皬緇撲竴涓嬶紝渚涙柊鎵嬪弬鑰?/span>
鑷畾涔夋爣絳句嬌鐢ㄥ涓嬶細
JSP欏甸潰寮曞叆錛?br />
<%@ taglib uri="/htdz-tag" prefix="htdz-tag"%>
鍦ㄩ渶瑕佹憜鏀劇炕欏電殑鐩稿叧鎸夐挳澶勪嬌鐢細
<htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}"/>
浠ヤ笅浠嬬粛濡備綍鑷畾涔夋爣絳撅細
1.棣栧厛鏄拡瀵硅嚜瀹氫箟鏍囩鐨勬弿榪幫細
鍒涘緩WEB-INF/tags/htdz-tag.tld鏍囩鎻忚堪鏂囦歡錛?br />
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>htdz tag</description>
<display-name>htdz tag</display-name>
<tlib-version>1.0</tlib-version>
<short-name>htdz-tag</short-name>
<uri>/htdz-tag</uri>
<tag>
<!--鍒嗛〉鎺т歡浣跨敤璇存槑錛?br />
1.鏈鍏ㄥ弬鏁扮敤娉曪細<htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}" className="button_small"/>
1.鏈綆鍙傛暟鐢ㄦ硶錛?lt;htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}"/>
鍙傛暟璇存槑錛?br />
1. pagesize涓烘瘡欏佃褰曟暟(蹇呭啓)
2. rowcount涓烘昏褰曟暟(蹇呭啓)
3. currpagenum涓哄綋鍓嶉〉鏁?蹇呭啓)
4. className涓哄垎欏墊寜閽牱寮忥紝濡傛灉涓嶅啓錛屽垯涓洪粯璁ゆ牱寮?br />
5. action涓篣RL璇鋒眰璺緞(蹇呭啓)
-->
<description>鍒嗛〉鎺т歡</description>
<!--JSP閲屼嬌鐢ㄦ椂鐨勬爣絳懼悕-->
<name>PagerTag</name>
<!--鐢ㄤ互灝嗚嚜瀹氫箟鏍囩瑙f瀽鎴愭帶浠剁殑Java綾?->
<tag-class>com.htdz.util.tag.PagerTag</tag-class>
<body-content>JSP</body-content>
<!--姣忎釜attribute浠h〃鏍囩鐨勪竴涓睘鎬?->
<attribute>
<description>pagesize:姣忛〉鏉℃暟</description>
<!--灞炴у悕-->
<name>pagesize</name>
<!--鏄惁蹇呭~灞炴?->
<required>true</required>
<!--姝ゅ睘鎬у兼槸鍚︽帴鍙桬L,<%= 涔嬬被鐨勫艦寮?->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>rowcount:鎬昏褰曟暟</description>
<name>rowcount</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>currpagenum:褰撳墠欏墊暟</description>
<name>currpagenum</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>action:URL璇鋒眰璺緞</description>
<name>action</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>className:鐢ㄤ簬瀹㈡埛绔‘瀹氬垎欏墊寜閽殑鏍峰紡</description>
<name>className</name>
<required>false</required>
</attribute>
</tag>
</taglib>
2.鍒涘緩鐢ㄤ簬灝嗘爣絳捐В鏋愪負欏甸潰緲婚〉鎺т歡鐨勭被
PagerTag.java
public class PagerTag extends TagSupport {
public static final int USER_PAGESIZE = 5;// 紺煎搧鎼滅儲--姣忛〉璁板綍鏁?br />
private static final String DEFAULT_BUTTON_CLASS= "button_small"; //緲婚〉鎸夐挳榛樿鏍峰紡
private static final String DISABLE_BUTTON_CLASS= "button_small_disable"; //澶辨晥鎸夐挳榛樿鏍峰紡
private int pagesize;
private int rowcount;
private int currpagenum;
private String action;
private String className;
public PagerTag() {
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
public void setRowcount(int rowcount) {
this.rowcount = rowcount;
}
public void setCurrpagenum(int currpagenum) {
this.currpagenum = currpagenum;
}
public void setClassName(String className) {
this.className = className;
}
public void setAction(String action) {
this.action = action;
}
public int doStartTag() throws JspException {
if (new Integer(pagesize) == null) {
throw new JspException("PagerTag鏍囩涓己涔弍agesize灞炴э紒");
}else if(pagesize==0){
throw new JspException("PagerTag鏍囩涓殑pagesize灞炴ф棤鍊鹼紒");
}
if (new Integer(rowcount) == null) {
throw new JspException("PagerTag鏍囩涓己涔弐owcount灞炴э紒");
}
if (new Integer(currpagenum) == null) {
throw new JspException("PagerTag鏍囩涓己涔廲urrpagenum灞炴э紒");
}
if (action == null) {
throw new JspException("PagerTag鏍囩涓己涔廰ction灞炴э紒");
}else if(action.length()==0){
throw new JspException("PagerTag鏍囩涓殑action灞炴ф棤鍊鹼紒");
}
//濡傛灉欏甸潰鏍囩涓病鍐檆lassName灞炴э紝鍒欒緲婚〉鎸夐挳搴旂敤榛樿鐨勬寜閽牱寮?br />
if(className==null||className.length()==0){
className = DEFAULT_BUTTON_CLASS;
}
//鑾峰彇鎬婚〉鏁?br />
int totalpagesize = getTotalpagesize(rowcount);
//鐢ㄤ互鏍囧織鏄惁鑳戒笂緲?br />
boolean noUp = false;
//鐢ㄤ互鏍囧織鏄惁鑳戒笅緲?br />
boolean noDown = false;
//澹版槑搴旂敤浜?棣栭〉'錛?涓婁竴欏?鎸夐挳鐨勬牱寮?鍥犱負姝や咯鎸夐挳瑕佷箞鍚屾椂澶辨晥錛岃涔堝悓鏃跺彲鐢?
String buttonClass1 = className;
//澹版槑搴旂敤浜?涓嬩竴欏?錛?灝鵑〉'鎸夐挳鐨勬牱寮?鍚屼笂)
String buttonClass2 = className;
//濡傛灉鏃犺褰曪紝鍒欒緗婚〉鏁頒笌褰撳墠欏墊暟閮戒負1
if(rowcount==0){
currpagenum = 1;
totalpagesize = 1;
}
//濡傛灉褰撳墠欏墊槸絎竴欏?br />
if(currpagenum==1){
noUp = true;
//璁劇疆'棣栭〉'錛?涓婁竴欏?鎸夐挳澶辨晥鏍峰紡
buttonClass1 = DISABLE_BUTTON_CLASS;
}
//濡傛灉褰撳墠欏墊槸鏈澶ч〉
if(currpagenum==totalpagesize){
noDown = true;
//璁劇疆'涓嬩竴欏?錛?灝鵑〉'鎸夐挳澶辨晥鏍峰紡
buttonClass2 = DISABLE_BUTTON_CLASS;
}
try {
StringBuffer html = new StringBuffer();
html.append(currpagenum+"/"+totalpagesize+"欏?);
html.append("<input class="+buttonClass1+" type=\"button\" value=\"棣栭〉\" onclick=\"turnPage('first','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");
if(noUp){
html.append("disabled=\"true\"");
}
html.append("/>");
html.append("<input class="+buttonClass1+" type=\"button\" value=\"涓婁竴欏礬" onclick=\"turnPage('up','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");
if(noUp){
html.append("disabled=\"true\"");
}
html.append("/>");
html.append("<input class="+buttonClass2+" type=\"button\" value=\"涓嬩竴欏礬" onclick=\"turnPage('down','"+currpagenum+"','"+totalpagesize+"','"+action+"')\"");
if(noDown){
html.append("disabled=\"true\"");
}
html.append("/>");
html.append("<input class="+buttonClass2+" type=\"button\" value=\"灝鵑〉\" onclick=\"turnPage('last','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");
if(noDown){
html.append("disabled=\"true\"");
}
html.append("/>");
html.append(currpagenum+"/"+totalpagesize+"欏?amp;nbsp; ");
html.append("<input type=\"text\" maxlength=\"3\" id=\"text\" size=\"3\" onkeypress=\"return checkInput(event);\" />欏?);
html.append("<input class="+className+" type=\"button\" value=\"GO\" onclick=\"turnPage('to','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" />");
pageContext.getOut().println(html.toString());
} catch (Exception e) {
throw new JspException(e.getMessage());
}
return this.SKIP_BODY;
}
/**
* 鏍規(guī)嵁鎬昏褰曟暟寰楀埌鎬婚〉鏁?br />
*
* @param rowcount
* 鎬昏褰曟暟
* @return 鎬婚〉鏁?br />
*/
public int getTotalpagesize(int rowcount) {
int totalpagesize = 0;
if (rowcount % pagesize == 0) {
totalpagesize = rowcount / pagesize;
} else {
totalpagesize = rowcount / pagesize + 1;
}
return totalpagesize;
}
}
鍒版涓烘錛岃嚜瀹氫箟鏍囩涔﹀凡瀹屾垚銆?br /> 鍙簲鐢ㄤ簬欏圭洰鍚勫錛?br /> 鍙欏甸潰涓婇伒寰爣絳炬弿榪拌鍒欙紝鍚庡彴璇ョ粰鏍囩灞炴т紶鍊肩殑鏃跺欒寰椾紶灝辮浜嗐?br /> 浠ヤ笅鐢ㄤ竴涓畝鍗曠殑渚嬪瓙鏉ヨ鏄庝竴涓嬶紝綰㈣壊瀛椾綋鏄劇ず鐨勯儴鍒嗗埆蹇樿鍐欏氨琛屼簡銆?/span>
UserAction.java:
public class UserAction extends ActionSupport {
private UserService userService;
private List<User> users;
public String findUser(){
String str = null;
HttpServletRequest request = ServletActionContext.getRequest();
Map sessionMap = ActionContext.getContext().getSession();
String currpagenum= "1";
try {
String pagenum = request.getParameter("pagenum ");
if(pagenum != null && pagenum .length()!=0){
currpagenum= pagenum ;
}
} catch (Exception e) {
}
//鏌ヨ鐢ㄦ埛璁板綍
users= userService.findUser(pageNum);
if(users.size!=0){
request.setAttribute("users", users);
int rowcount = userService.getCount();
request.setAttribute("rowcount ",rowcount );
request.setAttribute("currpagenum",currpagenum);
str = "success";//鎴愬姛瑙嗗浘
}else{
message = "鏃犺褰?"
str = "failure";//澶辮觸瑙嗗浘
}
request.setAttribute("pagesize", PagerTag.USER_PAGESIZE);
request.setAttribute("action", "findUser.action);
//榪斿洖瑙嗗浘
return str;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public List<User> getUsers(){
return users;
}
public void setUsers(List<User> users){
this.users = users;
}
}
UserService.java:
public class UserService {
private UserDao userDao;
public List<User> findUser(String pageNum){
List<User> userList = userDao.findUser(pageNum);
return userList;
}
public int getCount(){
int count = userDao.getCount();
return count;
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
UserDao.java:
public class UserDao extends HibernateDaoSupport {
/**
* 鏌ヨ鐢ㄦ埛
* @return User瀵硅薄闆嗗悎
*/
public List<User> findUser(String pagenum) {
List<User> users = null;
Session session = null;
try {
int myPagenum= Integer.parseInt(pagenum);
String hql = "from User";
session = this.getSession();
Query query = session.createQuery(hql);
query.setFirstResult(Pager.USER_PAGESIZE * (myPagenum - 1));
query.setMaxResults(Pager.USER_PAGESIZE);
users = query.list();
session.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
return users;
}
/**
* 鑾峰彇鐢ㄦ埛鎬昏褰曟暟
* @return 鐢ㄦ埛鎬昏褰曟暟
*/
public int getCount(){
String hql ="select count(id) from User";
Session session = null;
int count =0;
try {
session = this.getSession();
Query query = session.createQuery(hql);
List list = query.list();
session.flush();
count = Integer.parseInt(list.get(0).toString());
} catch (Exception e) {
e.printStackTrace();
} finally{
session.close();
}
return count;
}
}