TA的每日心情 衰 2021-2-2 11:21
签到天数: 36 天
[LV.5]常住居民I
Sturts2漏洞百出,可谓是年年都会爆发一次或大或小的风波,但是即使这样,Sturts2还是有一批用户的。
3 E1 j( P8 Y F2 g+ r9 C1 N 花费十几分钟,简单的搭建实现了一下基本的登录功能。都是入门级的,高手肯定是不屑了,但是对于初次涉猎的小白们,还是可以提供点参考的。
/ v( c6 i# X1 X2 I+ G0 f& f( ` 1 T* ], u/ U' v Q
注意:
% w3 T7 ~5 C: Y# T. d+ p8 |$ i 0)项目Demo可以正常运行并经过测试
( [3 Z) A! A* S. J 1)代码是伪代码,自行添加逻辑
1 H( D4 f9 M: |; Y6 C0 m3 C9 o 2)struts 2-2.5.10 加入了Action验证,注意 struts.xml 中的 <global-allowed-methods>regex:.*</global-allowed-methods> $ k ~+ t7 n) M' q9 X. G6 ]5 m7 @7 O
3)struts2-2.5.10 拦截器修改了路径,注意web.xml中的配置 ' s6 `% k2 G1 F' d& A
4)本案例,返回采用json数据的形式,使用struts2-json-plugin-2.3.20.jar,json配置见struts.xml 全局配置。
# z3 V' @+ {7 Y' t: A$ G \
: Z+ ]. W% j: I# | 一、项目搭建(使用最新版本struts2-core-2.5.10)- W$ {1 ?7 _, _, i3 Q, V1 v( e. `
9 ?+ J; P+ E) {+ G7 Y' n! Y+ ? 1、相关JAR# X3 r& E3 @; t. R/ P1 q& d
commons-fileupload-1.3.2.jar; g1 U9 x8 I! a
commons-io-2.4.jar' i+ T9 O9 o+ c0 }8 B) e
commons-lang3-3.4.jar$ c3 q6 _7 O- ~+ b8 T, M
commons-logging-1.2.jar8 g5 {7 L: x0 n) K
freemarker-2.3.23.jar
4 W* Z5 L% T. S java ssist-3.20.0-GA.jar
3 i0 E# z, [4 y log4j-api-2.7.jar
# H7 W# F X6 P. ]5 R log4j-core-2.7.jar# Y' v' l6 ?5 d2 {8 ^( v$ q0 c
ognl-3.1.12.jar$ f: e0 n9 S! W" n6 q9 Z
struts2-core-2.5.10.jar/ I6 ~$ {2 W& Z1 k6 j
struts2-json-plugin-2.3.20.jar
6 v1 X) `0 D( _& M xwork-core-2.3.31.jar K& M7 S8 h+ L# b5 l. e
) X: r" Z6 m* m# V 2、前端框架$ d: b+ h2 t7 F
Jqueryjquery-1.10.2.min.js
' o* y6 P( ~! G; F& s bootstrap.min.js1 V8 S' I8 }0 R; Z1 w! p6 s
' g. w( I% ?$ d3 Y v a9 ?4 j6 c 3、相关配置:3 q% u, B1 V7 r t+ v) U9 C
web.xml
% |) z0 D2 j) \5 E" h <?xml version="1.0" encoding="UTF-8"?>
/ R( ~4 g9 o9 |0 Y/ B <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" >
. Y, u3 ~1 F. z# I <display-name>struts2</display-name>% b8 I, H" y9 n+ ^" d
<!-- struts2配置 -->
5 C, r0 ^! ~8 S! s9 T$ c% J <filter>+ ?6 }& A& `. U$ y" |$ h1 L
<filter-name>struts2</filter-name>
2 }1 P, Z3 n- s: s2 d" W& ?) u( P <filter-class>0 I4 \; v9 r' l2 L% b+ M" F
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
) \( P$ X" m \- l: |. @ </filter-class>$ D% h5 m& R, K1 R- k4 w* X
</filter>
# Z! j2 M" r8 q <filter-mapping>
+ Y$ T8 ?+ h9 B. X( N$ n6 C <filter-name>struts2</filter-name>, N( l; L; c: K W$ g
<url-pattern>/*</url-pattern>
+ i9 `6 U- _8 c' L: D. w5 {8 B/ D) U </filter-mapping>
5 `% ^/ J! _( q$ D8 G# o <welcome-file-list>: s4 |, x: u4 L
<welcome-file>login.jsp</welcome-file>+ C6 v" z7 P2 B
</welcome-file-list>
8 {1 T1 @, ]; s/ H7 V </web-a 复制代码
5 s) m$ f( f: A6 _2 q struts.xml$ W6 L+ P& y+ T0 I# Q2 ]
<?xml version="1.0" encoding="UTF-8" ?>
' Y. z9 }4 ?. B# L b- R <!DOCTYPE struts PUBLIC
7 h% _8 S) [: T% B8 i! l5 a9 C/ { "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
( O6 W' i) I3 f; Y# P "http://struts.apache.org/dtds/struts-2.5.dtd">- g. |& h* E9 C; f" q
<struts>. I: ]1 h ?3 H: y" F7 g9 F" |
<!-- struts配置文件改动后,是否重新加载 -->- \' m- w+ B8 T2 O* t3 R- e
<constant name="struts.configuration.xml.reload" value="true" />5 I% r8 y! d; q
<!-- 开发模式 开启它则默认开启了i18n.reload、configuration.xml.reload 上线后要关闭此选项 -->+ A8 B+ E. y# v! g3 p6 c( m
<constant name="struts.devMode" value="false" />
& Y; r! ~* d6 b; i <constant name="struts.i18n.encoding" value="UTF-8"/>3 m/ E6 S$ O7 K' w9 f
<constant name="struts.multipart.maxSize" value="1073741824"/><!-- 上传文件最大值 -->
4 o0 R$ z, P5 S* Y3 ~5 p* y <constant name="struts.custom.i18n.resources" value="config" />8 y/ F6 |+ a9 q
<constant name="struts.action.extension" value="action"/>( N P! Z4 X% J# m
<package name="struts-global" extends="json-default">
4 s( ?2 ?- W+ y$ L2 Q9 x+ K' ] <!-- 配置Json输出 配合使用 struts2-json-plugin-2.3.20.jar 后台配置 message -->8 r( r; `9 ~: `+ ?# ^# `+ Q5 o# ]
<global-results>
4 \( ~1 U* \+ h* T& o b7 C <result type="json">
6 ]/ P- S9 y8 T# p# L: ` <param name="root">message</param>
$ N0 ?& w4 y) _0 l, X </result>
! l4 v. q0 j# R2 }7 s </global-results>
" O. @' O K d6 h* ?- w. r7 F <!-- 2.5.10版本 匹配 -->
& z( F: r0 F+ o3 ~. \ <global-allowed-methods>regex:.*</global-allowed-methods>0 O) S$ }5 W, u0 g
</package>
" R) @ h# ~7 c( t <package name="user" extends="struts-global">- W8 A# d% U( U+ U, g
<action name="userAction_*" class="com.itstyle.web.user.UserAction" method="{1}">
0 G# I! c2 |0 Z/ H2 x <result name="logout">/login.jsp</result>3 ~, O H% ?* f
</action>4 L: E- B7 U* m# V
</package>
: ]5 t& ^$ [+ i </struts>& n, a. U5 t/ n+ Q8 H
# Z( a+ L) g' y8 n5 k: R 复制代码 Y Q; T* g- C2 ]* X: g
! P& J" o' y0 |+ m0 q i p% E4 a
UserAction3 u0 f8 M) n- q# v5 O U+ f
package com.itstyle.web.user;+ I! \$ m' G- l
. g- P m+ |; P/ F8 U
import com.opensymphony.xwork2.ActionSupport;2 z* c7 a3 M. g
/**9 _5 B \, \/ T2 O* N# R9 X c
*
+ V* U- X6 q+ V' M * @author 科帮网4 T+ k0 v7 u U! j5 n5 e* ?- x# V3 Z% f
** p) n( Q" s5 p, i! M8 S
*/9 g" N- H( T; m+ j" Y
public class UserAction extends ActionSupport {
4 z$ |, r) ?" |" W1 } F private static final long serialVersionUID = 1L;9 i" A, T3 k$ H: C+ @4 p
private String message;
. X! D8 R, h9 n6 K5 \" o8 j' { private String userName;& @" p, H( Y1 {" R
private String password;2 p! M+ n! ], X. J! L& }/ s, S" Q
( f. J2 K% z! ^: e; d0 g1 G z0 h
public String login(){, X% F3 ?$ B$ G& m3 c7 M
if("admin".equals(userName)&&"admin".equals(password)){$ y7 }6 R3 h4 J4 q& w2 O* N9 W4 j
message = "0";
1 F/ m% p0 Z; w) f9 m9 K }else{
% G( ]0 t: F( d. D w7 L6 ]6 N" P; Z message = "1";0 F- h- V! p/ `9 g. P# B
}
' i( c. J# Z, K return SUCCESS; e R* P- ^2 \5 P' Q
}
4 j8 u, v9 S* P0 i `
$ M: F3 i& G0 C3 M8 l3 y* y public void setMessage(String message) {1 n; F; P/ ?$ j% r6 n
this.message = message;) L& q& ?# n8 Z9 Z8 Y& r
}
9 G$ O, V( Y, M. Z; e+ x1 I: o/ W public String getMessage() {- i/ ^( u$ S/ V: m1 _, {
return message;4 U4 N; v) b+ D; k( L n
}5 h, _. _; q6 J& l- B2 h) d, e
4 I3 ` B7 P, \5 z
public void setUserName(String userName) {
" K: y) R! X9 ?7 F8 h this.userName = userName;
- B5 O, E/ `( T6 G1 `7 p# E8 u \3 @ }# a! A' M% C6 E l6 C4 X
. ?" Z2 j6 u1 E. X; m public void setPassword(String password) {
P d k% B" p9 N% _ this.password = password;
/ r/ j0 u2 m+ o# ~' f }
$ q% A+ b/ ~, V R* i4 { }: a* L; w5 p( u* C w8 |
复制代码 2 p7 M8 ` o% e: j
1 ~7 U% g3 x, u% q! l! D8 h9 I
login.jsp" |# ]* Y: @1 E" t* j
<script>
6 L' _; u1 `* l% @. a var path = '<%=basePath %>';4 V1 g9 Z& X* D* x3 M
function login(){
4 \( j5 m' b' Z$ `( }. G( k* C+ ]" Y E var username = $("#username").val();8 F& ~8 A3 R+ N1 l& c% q
var password = $("#password").val();
) w( p) c6 b* @ var data = {username:username,password:password};
0 ]8 v# o o6 F $.ajax({! K; R$ U9 R1 L: k
type:"post",
9 M1 P1 c) W& q url:path+"userAction_login.action",
" A! O- F/ z) u6 W data:data,
/ s: m# E3 G- {; n dataType:"json",
7 w! B5 [- s9 a2 C& M; s2 Z async : false,
- G( S: r4 p, Q; b% H success : function(data) {
: Y, q8 K; o7 k7 T0 m4 j0 w& ` if(data==="0"){
; [1 d0 }( m @ alert("登录成功");: i0 ?- a* R) W8 {' R# V) N
window.location.href ="http://blog.52itstyle.com";
5 q( L# Q2 P7 s: E5 C3 h }else{1 m# n* [* _) T" Z
alert("登录失败");
/ L, L7 p, k- Q* u1 c }% Y1 l3 X% Z6 D- T! m, Y
}
" H! n( Y) K) M1 n });
4 u8 Z# Q1 a- F ?' E
9 {8 d) O+ w7 ^6 X }! U" t; B& q# p) N( F
9 N: s. E y( } I9 L </script> 复制代码
: {/ w3 l6 i& v+ x/ @: w 页面展示:# _& r- t( u+ \) Y7 W2 h. k
. d; q/ Q8 l( ?: I* r6 B7 J
" a7 W# j9 R" A7 E1 c$ i/ F
* }$ h8 V5 i) ]! x
基于Sturts2实现一个简单的登录功能.txt
(64 Bytes, 下载次数: 2, 售价: 1 IT币)
+ T4 ?; N; P* H' p" p$ _4 W0 G5 u* Y
科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关2、本站所有主题由该帖子作者发表,该帖子作者与科帮网 享有帖子相关版权3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网 的同意4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意7、科帮网 管理员和版主有权不事先通知发贴者而删除本文
JAVA爱好者①群:
JAVA爱好者②群:
JAVA爱好者③ :