TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
Sturts2漏洞百出,可谓是年年都会爆发一次或大或小的风波,但是即使这样,Sturts2还是有一批用户的。
1 N5 A! m/ e ^" v# x5 o花费十几分钟,简单的搭建实现了一下基本的登录功能。都是入门级的,高手肯定是不屑了,但是对于初次涉猎的小白们,还是可以提供点参考的。! ^' V! T1 u, Y) K$ N
; Q1 C% d0 L1 S0 x; }0 K注意:
! B$ G$ |) ~2 L$ p$ U0)项目Demo可以正常运行并经过测试
- i ?2 F; q" C( s1)代码是伪代码,自行添加逻辑
# Q# N2 e* Y+ i) {1 j; B4 ?2)struts2-2.5.10 加入了Action验证,注意 struts.xml 中的 <global-allowed-methods>regex:.*</global-allowed-methods>
" a& U5 g) G B$ u/ u3)struts2-2.5.10 拦截器修改了路径,注意web.xml中的配置
0 ?* R" W j( c' r/ Z6 b( m4)本案例,返回采用json数据的形式,使用struts2-json-plugin-2.3.20.jar,json配置见struts.xml 全局配置。
( Y8 F/ h6 g; F( N; y
8 Y, |$ U0 a! s一、项目搭建(使用最新版本struts2-core-2.5.10)8 f& u& J' a" I M3 ?$ V' R
8 a: R+ B9 L% |3 H
1、相关JAR* L0 h. D' Y* b+ O9 o0 ]5 w
commons-fileupload-1.3.2.jar G% S* G" O- s( `" Z. j- s" ^
commons-io-2.4.jar. W. B; ^7 B7 R4 R* J M( t6 h" p/ g
commons-lang3-3.4.jar
. ?% Q8 `. F; _% A$ Jcommons-logging-1.2.jar
1 U. ~* p: ?/ G7 }) J/ \freemarker-2.3.23.jar
/ d7 r J4 |* R$ _( vjavassist-3.20.0-GA.jar( _/ W d' H+ {5 Q
log4j-api-2.7.jar
$ K3 `0 I' E6 p3 o' c% \8 r: zlog4j-core-2.7.jar
! w; L$ U' v5 G, mognl-3.1.12.jar8 w! a& @ o% f. t- I5 b
struts2-core-2.5.10.jar
: o2 d1 u3 c/ M, Fstruts2-json-plugin-2.3.20.jar7 ?8 J0 Y; g; B0 [( P
xwork-core-2.3.31.jar, @& J- C- G' Z( y; E( u& ~8 _
( B5 ^. J$ h `5 E2 t
2、前端框架" E' Z0 g2 ?& {' N
Jqueryjquery-1.10.2.min.js
' ~, Z& J: t! Gbootstrap.min.js3 `6 U4 E4 g+ D& Y3 ]
- o$ v& i5 r/ Z% d% d
3、相关配置:$ S* [. s( P- u* H
web.xml+ @' J ?# V; l% }. t4 i2 {+ H
- <?xml version="1.0" encoding="UTF-8"?>
, M2 K' g( i5 `8 U, x/ U - <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5" >
- X# G: @' I2 M# l - <display-name>struts2</display-name>
q7 S+ t! G5 F7 P' i1 ] - <!-- struts2配置 -->
7 ^/ _ _, `$ I - <filter>" v4 {+ x" E4 w* I
- <filter-name>struts2</filter-name>
9 L. a- J0 u, |+ z7 v+ A/ ~" r - <filter-class>3 }* e1 ^6 H9 x% V" H. c
- org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter. ^0 v5 a/ X# Q7 |
- </filter-class>
: j, r( k' C1 ~# x - </filter>
( B U) [8 d" [) v0 f: e9 Y) b - <filter-mapping>' @7 t `7 H7 y7 {
- <filter-name>struts2</filter-name>( N" M, F! I3 S# F* ]5 P( H2 M
- <url-pattern>/*</url-pattern>
7 r& e4 h% J* |1 O - </filter-mapping>
3 M; i) F2 x d1 U- M - <welcome-file-list>
, A: b4 G4 x0 H- t/ s0 v9 r - <welcome-file>login.jsp</welcome-file>/ W! W# u$ G' k3 `* a. w
- </welcome-file-list>
8 A5 r C: S! R: F" |# M0 Z - </web-a
复制代码 ! X8 ~8 b( w5 U. r9 c% r
struts.xml
3 }4 f8 n+ |5 ] p- <?xml version="1.0" encoding="UTF-8" ?>
; o- g' R+ @& p, {6 ]2 [ - <!DOCTYPE struts PUBLIC
$ h! w2 x m- C5 f# z7 v4 W - "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"+ g2 c; X: ?' C' D% a3 ~
- "http://struts.apache.org/dtds/struts-2.5.dtd">
i$ ^3 N- U7 {: ?( [4 ~ - <struts>
4 [& _; g. }" {' s& w9 a1 ` - <!-- struts配置文件改动后,是否重新加载 -->
w: c$ \; g; e# ~- E - <constant name="struts.configuration.xml.reload" value="true" />
+ z+ ~* g4 w6 `8 _- h9 b& L2 l - <!-- 开发模式 开启它则默认开启了i18n.reload、configuration.xml.reload 上线后要关闭此选项 -->
( L) q* l' w6 v! X( t - <constant name="struts.devMode" value="false" /> o2 B9 t: w/ ~( i
- <constant name="struts.i18n.encoding" value="UTF-8"/>% Q9 K) z. D8 f y8 z3 w6 O
- <constant name="struts.multipart.maxSize" value="1073741824"/><!-- 上传文件最大值 -->
1 L3 X6 H* U& F - <constant name="struts.custom.i18n.resources" value="config" />
. k) P# m' [5 z' | - <constant name="struts.action.extension" value="action"/>! i/ y! R5 R0 K
- <package name="struts-global" extends="json-default">
9 G% B, B$ v) d - <!-- 配置Json输出 配合使用 struts2-json-plugin-2.3.20.jar 后台配置 message -->
" K! j+ ]& I! [ - <global-results> * H* E6 C4 b5 q2 m
- <result type="json">/ p5 @( h p1 X9 e/ I
- <param name="root">message</param>% E7 D/ r6 \# W- g/ N3 x, ]
- </result>6 N# N- E0 H' g: ?) G" y& S
- </global-results> T1 i3 B7 P2 U1 l( h0 a
- <!-- 2.5.10版本 匹配 -->- X' M1 w1 _# c3 }
- <global-allowed-methods>regex:.*</global-allowed-methods>
! S/ T O0 x" j; J, V7 L$ h K - </package>
C3 Q3 _% \+ y4 c8 E/ q& G, W - <package name="user" extends="struts-global">
$ S7 O+ k/ `8 H - <action name="userAction_*" class="com.itstyle.web.user.UserAction" method="{1}">5 [! u0 B' U7 S3 G! \+ x1 a
- <result name="logout">/login.jsp</result>
) a8 \( U2 M% l - </action>
1 l5 s3 h- w. @+ U - </package>% U: ?% h) ~6 l
- </struts>3 K3 _; \8 M# Y9 X" E' Q
- 6 d8 g8 R. {- N. @
复制代码
, j% h6 Q& ?* c9 O1 \: F; A1 c: s1 J# P9 E0 H. s4 z
UserAction( |6 O z5 x& q: t6 q# |
- package com.itstyle.web.user;
/ K p; ]# u) a& h
' ~/ q! B" s, r- import com.opensymphony.xwork2.ActionSupport;
: B8 _; c+ V) K - /**
. W, E/ X0 D4 P2 T9 S6 U9 o - * 8 j: x3 t3 o9 m
- * @author 科帮网8 O" V5 f/ H% `% b7 m0 H' i5 N- Y
- *0 ?4 ]4 v' h/ B
- */
* G/ }9 E+ Q$ Y4 b) s - public class UserAction extends ActionSupport {5 d% a- i% ~; t' ^6 _! C8 ^% g$ c
- private static final long serialVersionUID = 1L;
& R; P/ r4 ]) c: q - private String message;9 u5 c5 n: Y a) j
- private String userName;2 I7 Z8 a+ v" J, [: q
- private String password;4 e) X# G5 @' r7 L9 ?2 k: L2 `
- # | {' o( U! ^* T$ ~
- public String login(){$ R; y+ d' s7 V% u7 b
- if("admin".equals(userName)&&"admin".equals(password)){
9 @1 L5 H/ [! D" C! A - message = "0";0 [; B* G$ @4 m4 l" r# n$ ~
- }else{' R1 y( ^. x" J; l% A7 o
- message = "1";+ s& h8 A. e( t' s
- }
# i, @/ F# m+ s; ` s - return SUCCESS;
/ K/ ? U4 F5 M& H - }4 o( n4 ], Y1 N; B. m
- 1 D- w4 |4 y, b/ e
- public void setMessage(String message) {
& m \8 i9 y8 c7 }1 R o - this.message = message;1 P, {2 M( A, I% I) n' V
- }4 O {' ?" a3 @& N1 [
- public String getMessage() {% S0 c& Q+ ? I! M+ C8 A
- return message;. L8 z5 f$ ]! j0 T7 [
- }- _" |2 d! V# h5 j: `+ p
- 6 | A T0 `, G. j, n* u
- public void setUserName(String userName) {! J* D l$ F2 h8 C0 S5 T
- this.userName = userName;' T9 v# A0 a2 e
- }
* g' h! W& a F# S
4 T2 J6 ] S* x& y+ s" s$ l9 z6 I- public void setPassword(String password) {+ b0 H7 R5 W- u" K% w
- this.password = password;: Y/ ~! }) |: W7 {0 [
- }
- \ u1 o V3 T8 d - }
% L. f4 c: i1 k+ x
复制代码 - v2 ]6 I( E& H6 ^3 a
' `' b6 i$ P) \' t4 Rlogin.jsp7 N: S ^: g* v* M. H0 x
- <script>
8 p6 `" ~# G7 H# e/ k. z - var path = '<%=basePath %>';
/ }# Q) z6 v" `- n; ] { - function login(){3 R9 L$ `$ B6 w8 t/ s* }
- var username = $("#username").val();, a7 f0 s2 d+ G% Z5 A3 k* S- U
- var password = $("#password").val();( p1 L# Y" ]. Z$ |4 y% c
- var data = {username:username,password:password};
1 d9 N3 O# m/ z; X5 S. N* R - $.ajax({% o5 f+ R( M5 j
- type:"post",
' A$ c+ G" _- s' J- a - url:path+"userAction_login.action",
; V+ w- {8 K. ]7 k" }- s/ G! Q" g - data:data,- C* Z# p# K- ?( B, Z" m
- dataType:"json",; b% z7 U @, V# J2 D
- async : false," s6 s! H+ L. R( o
- success : function(data) {8 S6 P" {+ N$ ~# r; X4 H5 }/ b( i
- if(data==="0"){
/ T3 x1 q1 D4 p$ r3 E - alert("登录成功");
" d2 M. k$ I# [ - window.location.href ="http://blog.52itstyle.com";# V: }/ Z0 V _) z4 w
- }else{
3 D- V6 m' E$ t% q) T1 Y4 ] - alert("登录失败");; w1 j! b4 t/ F6 K) q
- }
; m* s5 M( a o+ b6 D, K( y - }2 L& ]( k. M& W6 Y) M
- });
2 {3 z/ ]3 Z8 V- o/ ~, s. q - 9 C% O6 C& J- z! P3 X0 Q1 k
- }9 e# S8 l- s, W! o/ C
- 1 P. t5 o( A5 q1 Z% R- b
- </script>
复制代码 X( d% C0 x2 h3 A; K3 ?
页面展示:+ g7 |2 }# w; z( y0 x4 V' Y
5 m1 @7 d5 ~* m7 g
3 Z: i+ ^. E; N* O3 Q$ u
- A( I/ t- y/ t' b. H- {
基于Sturts2实现一个简单的登录功能.txt
(64 Bytes, 下载次数: 2, 售价: 1 IT币)
9 F0 b) Y& ~, j; C
|
|