TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
Sturts2漏洞百出,可谓是年年都会爆发一次或大或小的风波,但是即使这样,Sturts2还是有一批用户的。
8 c0 \' B( i/ j6 y* @花费十几分钟,简单的搭建实现了一下基本的登录功能。都是入门级的,高手肯定是不屑了,但是对于初次涉猎的小白们,还是可以提供点参考的。4 F. Y. r! O+ Y" {* Z5 ?& M
, o1 u/ Z5 u+ j# p注意:
. ?. B! H3 b- W( y, y" \8 I0)项目Demo可以正常运行并经过测试
- S5 o! a0 p" ^. f' q1)代码是伪代码,自行添加逻辑
: w2 {2 X& C* H+ n' {6 I, \ u2)struts2-2.5.10 加入了Action验证,注意 struts.xml 中的 <global-allowed-methods>regex:.*</global-allowed-methods>
. P0 R9 l; t+ @) o) d" `; U3)struts2-2.5.10 拦截器修改了路径,注意web.xml中的配置
- ]/ `9 b0 x7 k6 J7 g: E4)本案例,返回采用json数据的形式,使用struts2-json-plugin-2.3.20.jar,json配置见struts.xml 全局配置。! A/ L2 ^- K: A: B+ \6 R) ^/ D+ C. k$ ?
* N9 [; i& }! I7 ^* n一、项目搭建(使用最新版本struts2-core-2.5.10)
- k& A6 j4 m7 y; k, m* }$ F6 t$ m/ Y0 m' |2 V; ?5 W
1、相关JAR
3 F }# `4 _2 e6 {; E0 kcommons-fileupload-1.3.2.jar) U2 O" o& h& `* o" n& p7 c U9 p
commons-io-2.4.jar8 V0 ]7 U; ~* R% i
commons-lang3-3.4.jar" ]* ^3 p2 b2 c0 P
commons-logging-1.2.jar2 y B1 H, l( z' H" q
freemarker-2.3.23.jar5 z: g" B( q" m/ Y: p/ V
javassist-3.20.0-GA.jar9 p6 g( r+ K1 b9 d2 i
log4j-api-2.7.jar) c: H& l9 i9 v+ K
log4j-core-2.7.jar t) E% w1 w, K4 [
ognl-3.1.12.jar
$ `/ s3 E3 J' _! v# B2 R( [3 p" Bstruts2-core-2.5.10.jar
' F. Q0 V1 l/ K+ E7 W/ Jstruts2-json-plugin-2.3.20.jar! U6 ]' E% c. p% L! V- f: e0 X
xwork-core-2.3.31.jar
( [( H% @: h$ Q9 {1 b$ P( c3 G- Z4 o: }. d
2、前端框架9 d' U: |3 G2 o) ?/ b9 V5 k) f7 r
Jqueryjquery-1.10.2.min.js: R4 U6 `* G% R4 }3 q
bootstrap.min.js6 L3 J! K2 g+ ?% K! J
% ?; p& j5 K# f9 I3、相关配置:3 M& y( }8 r2 q% ?- Y7 s4 L ?
web.xml( _# C4 T9 A- u. `
- <?xml version="1.0" encoding="UTF-8"?>. \; Y' G2 N. Q1 o$ |
- <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" >
$ }7 J) T# R0 \9 [ - <display-name>struts2</display-name>5 M% f3 K0 l o7 `+ C
- <!-- struts2配置 -->4 B; g; m# w+ S3 x) T8 K5 z
- <filter>. N; U+ ~: ?) `) G
- <filter-name>struts2</filter-name>2 ?& |% E1 B3 |; x: L1 N
- <filter-class>
! d2 Z$ n- a; p7 Y0 V/ F - org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
) G h4 k9 i3 ?* S - </filter-class>
% H& F4 Z3 U- ]: B - </filter>
: d8 _+ ?" O; z; v3 s8 e2 e - <filter-mapping>: ~" F' V( p3 M4 U5 W/ B# I
- <filter-name>struts2</filter-name>: m0 V1 q: b2 h5 ~& v
- <url-pattern>/*</url-pattern>" o. u6 \4 Q: Q% Q: O3 `2 ]
- </filter-mapping>
1 F' N/ h/ F; S) T# A& s# j! O - <welcome-file-list>
; O$ X6 u5 Q2 E5 k- p& ~' p0 G* M - <welcome-file>login.jsp</welcome-file>5 x3 A# H- [$ T
- </welcome-file-list>
& U4 O1 _8 T3 v - </web-a
复制代码
7 I1 Y+ h9 ?5 ]0 g$ ?( `2 Gstruts.xml% b4 z, z6 G7 L, G2 I
- <?xml version="1.0" encoding="UTF-8" ?>0 E# E+ ^+ k. m, g! o7 @! C* x% b9 o* h
- <!DOCTYPE struts PUBLIC5 u# I) ?' g! }6 A
- "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"/ @& q7 u) T2 y7 @+ O
- "http://struts.apache.org/dtds/struts-2.5.dtd">
$ l4 Q7 u$ @5 N. Q' w+ I - <struts>' {0 }2 [4 J8 K* ?/ R
- <!-- struts配置文件改动后,是否重新加载 -->
4 h- \' p7 z# D Y. x: L - <constant name="struts.configuration.xml.reload" value="true" />" \ ^2 c$ A8 i9 L: B1 W" j/ P
- <!-- 开发模式 开启它则默认开启了i18n.reload、configuration.xml.reload 上线后要关闭此选项 -->
% g" @1 F3 P m, D - <constant name="struts.devMode" value="false" />
8 t; t. O2 d7 x+ @# U7 a - <constant name="struts.i18n.encoding" value="UTF-8"/>
4 L* d! E* B$ F) J - <constant name="struts.multipart.maxSize" value="1073741824"/><!-- 上传文件最大值 -->/ V Q- Z1 C: h# U
- <constant name="struts.custom.i18n.resources" value="config" />
9 E5 O& s" g1 Z/ D - <constant name="struts.action.extension" value="action"/>
* J6 o1 B8 j7 ^8 g$ E - <package name="struts-global" extends="json-default">' q+ r% A. P K: x0 ?
- <!-- 配置Json输出 配合使用 struts2-json-plugin-2.3.20.jar 后台配置 message -->
5 R2 O- J) R. T3 H& D& ~$ x2 ? - <global-results> & Z" m: O F6 N1 ?. e) T# M
- <result type="json">6 W4 J$ F# _% V3 n3 e- \( B
- <param name="root">message</param>0 |/ P. }3 {. ^+ C5 A" B6 L& a
- </result>/ {" O! K2 ]: U0 x# T) |% Y
- </global-results>7 O2 S) l8 K" S0 B& i* A9 M' l
- <!-- 2.5.10版本 匹配 -->
+ p9 ]$ }1 M* T - <global-allowed-methods>regex:.*</global-allowed-methods>+ \9 p0 Y8 {+ W3 X$ t' z) ~
- </package>4 ?3 S7 z$ ]. m& s v. _, z) }
- <package name="user" extends="struts-global">( D& Q0 a% e3 m6 {: j
- <action name="userAction_*" class="com.itstyle.web.user.UserAction" method="{1}">
7 T4 \1 N4 t2 w+ r8 @ - <result name="logout">/login.jsp</result>
5 e; l, v, A+ I$ _5 g - </action>
( N j6 A4 t5 m - </package>5 ^# R) C; s% i* k/ ?
- </struts>/ h: F9 j5 T+ A' u5 h
& J: ^% L/ M' U3 \8 P
复制代码 . c. a$ D4 Y" B1 z7 l+ m7 P
9 w" ~4 ]: x, _9 h/ ?
UserAction! i4 l5 Q$ P1 u
- package com.itstyle.web.user;
$ E2 L6 R! A5 l1 L M - ; w8 I$ P0 H& Z% V" B( B2 K0 ^5 V
- import com.opensymphony.xwork2.ActionSupport;+ S, ?. q) Z/ [; H$ V) P. J
- /**" R+ ]2 f1 D" t/ j* ?# O- J
- * " H7 g( j9 ~, u& p
- * @author 科帮网
2 P$ u$ F3 h1 l7 o- ~& B4 J: z8 J - *
@3 P3 [& R% G. X - */
|# a% {% O. ~ - public class UserAction extends ActionSupport {) a3 Y* R3 Y( g( t% a- {( n9 f; i
- private static final long serialVersionUID = 1L;/ s9 |4 T' b7 \9 S+ k, K, f5 S
- private String message;
% ] z3 S5 O7 b - private String userName;% H! d7 [1 @7 s" d z- u8 W0 u
- private String password;% }# q3 n2 g& h" j+ i( A
- ) O- ^! f; T% T0 J/ h1 I
- public String login(){
$ G( I2 Q+ b) j( O - if("admin".equals(userName)&&"admin".equals(password)){& q: Q+ Q' q8 M
- message = "0";- B% U8 a9 Z9 M# O% L- v/ d
- }else{
0 x7 X1 h( e7 i. d' r* Q" I - message = "1";: ]% d: C1 H) N1 N, J) d
- }- j/ F: w1 r5 h- o( M
- return SUCCESS;
* q0 o9 B$ U- v7 }, x9 m; ~4 U - }* A. f2 G' G: }7 K. Q# _& w7 k5 }
-
8 J% w! n. ?2 c1 @, m, N - public void setMessage(String message) {
' S: L4 r2 M" E* B J - this.message = message;
5 K5 g$ Y! s" t( \6 _9 {2 K" f - }
' V. @* U3 W0 B9 f8 u1 P- f& P - public String getMessage() {+ ^$ O) x2 A+ _ n+ S
- return message;
/ p4 v4 B `1 |+ L: } - }2 R' u! r. Z7 `! |* l# f( Z
* g( [8 J6 ?- s, O# H# J8 \ ^- public void setUserName(String userName) {. j* c' S R: M3 R2 V
- this.userName = userName;: O/ a4 K! W% y8 i/ L% r
- }
3 r" g9 S+ z- D& o( Y2 E; }
' Q1 S4 c6 j1 P. X! ^- public void setPassword(String password) {4 o* ]9 y" }3 B
- this.password = password;0 L6 M7 j q4 r
- }
" d; l0 K |; O0 g5 V `7 T - }
7 |1 {& o' W$ H9 Z0 c* H$ L
复制代码
$ R. o ~ V0 N! q. ]+ I( K3 C- x8 ]3 S# D. b& A) C& i
login.jsp: b! ]1 S0 y3 L2 B: q' M* M
- <script>
6 O9 R$ c2 H* y# t& B7 U - var path = '<%=basePath %>';, ~# G5 G, z% B2 w2 K
- function login(){
9 i5 h2 O! h. K2 a - var username = $("#username").val();9 ~' E4 m$ |5 ?5 n
- var password = $("#password").val();
; e8 C w$ \& T - var data = {username:username,password:password};. j F' \2 A' H! ~( ]# g
- $.ajax({
$ [. @& H- U. K! B" Z" m - type:"post",
+ N: j" b# t& t7 \8 Z/ {$ Z& ~ - url:path+"userAction_login.action",+ f1 W# \6 L6 s' K4 W% T0 o
- data:data,
+ F7 d$ H7 ]$ e( C - dataType:"json",' O8 _* T9 R! S
- async : false,' T1 f, R- m' e" r, A
- success : function(data) {
4 P. Y- Q; }" s% f1 G, A. D - if(data==="0"){# N4 ~# Z* k Y( k. e- ]7 E, l( i
- alert("登录成功");# d1 K1 ]7 w$ g. i& q
- window.location.href ="http://blog.52itstyle.com";/ w7 p" ^. E6 z. t) ~
- }else{
. Z" E$ }. X- }6 A0 o3 \4 X+ X - alert("登录失败");3 d" ~: A: {9 w* i! l
- }5 O% T3 o) b% b4 U7 F7 W
- }5 ~7 g; b f q7 q
- });
( B* M, g1 t7 l. z: h4 H( |7 l - 1 J" R: D. j" q
- }
/ x6 M+ U8 b- J* x) b( I+ u: [
' N1 c* y, g: e! S5 L: k3 {( r7 A* a- </script>
复制代码
% m4 S; g2 }' H$ {4 ]- T6 e页面展示:9 f+ q5 i6 H* o0 {2 J
$ k& L4 K! q1 W; Q' r6 V5 D- K
' Z( T, g9 \* b+ t7 d3 V+ m _( T0 t
# R( L# y* d; }$ P* b; o; e( L7 K4 B
基于Sturts2实现一个简单的登录功能.txt
(64 Bytes, 下载次数: 2, 售价: 1 IT币)
- Z e/ ]( \5 p" t+ S9 a8 U |
|