我的日常

登录/注册
您现在的位置:论坛 新手区 新手教程 > 基于Sturts2实现一个简单的登录功能
总共48086条微博

动态微博

查看: 1786|回复: 0

基于Sturts2实现一个简单的登录功能

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2017-04-16 18:19:53 |只看该作者 |倒序浏览
    Sturts2漏洞百出,可谓是年年都会爆发一次或大或小的风波,但是即使这样,Sturts2还是有一批用户的。
    0 H% H1 w6 |% v3 d1 m花费十几分钟,简单的搭建实现了一下基本的登录功能。都是入门级的,高手肯定是不屑了,但是对于初次涉猎的小白们,还是可以提供点参考的。
    - s$ |1 H# M" G9 n0 ]; C) K
    " O7 |1 `, n9 [9 \  W& @注意:
    ! P) Y6 ]; O& @+ M0)项目Demo可以正常运行并经过测试
    6 B# x3 V) j$ a% w  D1)代码是伪代码,自行添加逻辑
    0 }" k: s! y& j: `: h7 B. }2)struts2-2.5.10 加入了Action验证,注意 struts.xml 中的 <global-allowed-methods>regex:.*</global-allowed-methods>
    ; n% ~: F! ~# a1 Y3)struts2-2.5.10 拦截器修改了路径,注意web.xml中的配置
    0 R' P, s6 ?  ~; L% I# k$ Y4)本案例,返回采用json数据的形式,使用struts2-json-plugin-2.3.20.jar,json配置见struts.xml 全局配置。
    + F* _, z0 D* T4 K, M1 A0 d. f* Z8 j5 K7 P! ]9 [3 M
    一、项目搭建(使用最新版本struts2-core-2.5.10)& ^+ ?% N0 O0 S5 @& \
    4 ^, ?4 Z6 q& U0 E/ G
    1、相关JAR
    ; l! S8 I. b; qcommons-fileupload-1.3.2.jar9 f* j* Y0 m+ h+ d# d( y( D4 c
    commons-io-2.4.jar; Q- E& S/ t4 \1 X
    commons-lang3-3.4.jar7 o. }! ~8 A! ]3 A
    commons-logging-1.2.jar
    ; C2 t9 R6 r, O$ K6 sfreemarker-2.3.23.jar
    2 n# G/ s, _* N3 Z( F2 s: Xjavassist-3.20.0-GA.jar
    & [, R& x: }' flog4j-api-2.7.jar6 |. \& \# F. T5 Y. p
    log4j-core-2.7.jar
    $ m' Y8 n8 r" Xognl-3.1.12.jar
    4 o: p4 E& l1 }struts2-core-2.5.10.jar& P+ j2 \2 W* a9 H( d
    struts2-json-plugin-2.3.20.jar
    # b" B" r+ \: I0 d, C+ l" m/ Yxwork-core-2.3.31.jar$ K; A; s1 A0 G" [" P
    2 y" i" i) M6 @. h' e- b3 [4 X
    2、前端框架, q3 ^# R( B1 z* V
    Jqueryjquery-1.10.2.min.js
    : ]; `, p  L& t& L+ n" `; a6 C% qbootstrap.min.js
    ) f# u: t; ]4 i& r$ u& b( Q; j2 i
    8 v) O9 u/ B0 w" C3、相关配置:
    / s* J8 Z+ l3 V( w. r6 |8 ]9 d8 Gweb.xml
    . u. Y% C: m: ?2 V! f
    1. <?xml version="1.0" encoding="UTF-8"?>" d4 W) ?3 h4 R( g2 j. ]* K
    2. <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" >
      0 Y9 k% z3 z, H6 A2 I2 h% z7 K5 K
    3.     <display-name>struts2</display-name>
      / I$ x8 U0 p- @) U; V
    4.    <!-- struts2配置 -->
      & Z# o% O0 H% V0 Y
    5.    <filter>9 f0 s, ~6 A! e: j; \
    6.           <filter-name>struts2</filter-name>
      : ^" n& g- w4 g# X% H' N
    7.           <filter-class>, B! d' @: Q6 L) ]$ ~4 I
    8.                   org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
      " X" f0 I( _  [" J+ l# x9 b4 i4 V
    9.           </filter-class>* M1 p# h; n/ W, [7 ?
    10.   </filter>! u4 E8 N: |- c9 C: k8 Z1 D  D
    11.    <filter-mapping>) L& b# F* q7 [2 a6 P  A6 m; f& h
    12.           <filter-name>struts2</filter-name>
      ' J4 H/ h0 v! Z- ~1 |9 q
    13.           <url-pattern>/*</url-pattern>7 D* b, n% ]% i
    14.   </filter-mapping>) d3 w+ @& S* D0 `4 q$ [# b
    15.     <welcome-file-list>
      $ f3 N# b  P) p6 y
    16.       <welcome-file>login.jsp</welcome-file>
      & |( F" O+ V6 S- {3 k
    17.     </welcome-file-list>
      6 F6 U6 a  u2 o% ~, W
    18. </web-a
    复制代码

    5 k% f. D! A3 Q8 dstruts.xml/ `* s$ {- ~  T/ H- _
    1. <?xml version="1.0" encoding="UTF-8" ?>
      0 s$ b: ~! n( ?4 Q. n3 w
    2. <!DOCTYPE struts PUBLIC- V/ M9 H6 ^1 J' p- B, q& R
    3.         "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
      # D% d2 M! y% Z
    4.         "http://struts.apache.org/dtds/struts-2.5.dtd">
      3 O' A' O! T7 J% ?( N
    5. <struts>
      8 `) B% q; x" `1 C5 A
    6.         <!-- struts配置文件改动后,是否重新加载 -->
      $ k  e2 F5 b$ ?
    7.     <constant name="struts.configuration.xml.reload" value="true" />
      8 P0 _" @3 i5 V, v: h# j6 I
    8.     <!-- 开发模式 开启它则默认开启了i18n.reload、configuration.xml.reload 上线后要关闭此选项 -->3 b7 k) E* O  \. a7 ^% p) }2 z
    9.         <constant name="struts.devMode" value="false" />! S4 f% c" i* \; E8 G( d6 ~  F
    10.         <constant name="struts.i18n.encoding" value="UTF-8"/>
      9 R% R: G7 B; S
    11.         <constant name="struts.multipart.maxSize" value="1073741824"/><!-- 上传文件最大值 -->
      3 w: ?& c2 Q! I& V5 f
    12.         <constant name="struts.custom.i18n.resources" value="config" />
      : Z" S- d. c$ x7 T/ r; Q
    13.         <constant name="struts.action.extension" value="action"/>
      3 }+ p5 V+ s2 `0 M, ~/ c8 J
    14.         <package name="struts-global" extends="json-default">/ t& u" `$ m& W) W) Y( }7 B* }
    15.             <!-- 配置Json输出 配合使用 struts2-json-plugin-2.3.20.jar 后台配置 message -->
      ) P& \0 P( P! _2 f2 |. K& I8 ?
    16.                 <global-results> $ G+ N9 `, Z  V6 f
    17.                     <result  type="json">0 `: O3 ^5 W0 m! `, \- r
    18.                        <param name="root">message</param>0 z* g5 d+ ^( R7 P6 X5 F
    19.                     </result>
      ! v1 T& _  g* y9 p3 M
    20.                 </global-results>
      7 C* y. e* c! s3 ?! p! Y
    21.                 <!-- 2.5.10版本 匹配 -->7 ^5 L7 O( y+ i+ o8 r
    22.                 <global-allowed-methods>regex:.*</global-allowed-methods>
      1 V8 a6 S2 N* J. |3 f
    23.         </package>0 I! p% e- G$ A( t
    24.         <package name="user" extends="struts-global">3 c! J1 X, ^8 d& v% h
    25.                 <action name="userAction_*" class="com.itstyle.web.user.UserAction" method="{1}">
      0 I2 }2 {  k: t  t& t
    26.                         <result name="logout">/login.jsp</result>
      ) R: ^4 c8 X# L  e* v' c9 u: d5 {
    27.                 </action>
      6 i  o2 K0 g% y; S1 s
    28.         </package>  `" l. r; y8 H& E
    29. </struts>
      9 ]1 L+ _1 ?: G  X+ w7 V8 l
    30. 2 y  ~9 a$ {7 s  t' H5 ^
    复制代码

    4 e" i  e  S6 g& P6 n1 w
    + g; c2 B" S6 T4 [0 u3 a  ?UserAction
    " s5 ^. j* F) f' O, L7 I8 g1 h/ I
    1. package com.itstyle.web.user;
      7 O8 P/ \0 h: u

    2. 1 B2 K1 \# h# F  P4 S
    3. import com.opensymphony.xwork2.ActionSupport;% W0 p$ b9 n2 W7 a. J3 W* i
    4. /**  M$ m) N$ D9 g7 V) H2 [
    5. *
      1 f, Z+ t1 b6 u' B& o1 F) a
    6. * @author 科帮网4 o) o% W( [! |- f6 v$ C
    7. *1 g3 T- q$ u& h$ ?3 c& {& H
    8. */) V% C9 Z* K. l! `9 T$ z/ R6 l: ^
    9. public class UserAction extends ActionSupport {9 f% s; K  B2 T. K5 ?+ i/ D5 Z' ~/ P3 [
    10.         private static final long serialVersionUID = 1L;. @4 X- j. {* f: k1 q' B4 Y
    11.         private String message;
      + M+ ~3 y3 f" ]/ \7 x! p1 T4 `5 t+ l
    12.         private String userName;  t& e: e& p6 U
    13.         private String password;/ _( k( g# I; R! a
    14.         ( E1 O* K+ i2 K$ T: L0 _3 K4 \
    15.         public String login(){
      4 {$ u( `) t3 D8 f5 ~$ d( g( ~( j  m6 `
    16.                 if("admin".equals(userName)&&"admin".equals(password)){( i' U0 V. q; X
    17.                         message = "0";4 o/ D+ S: o0 g. S' D, l
    18.                 }else{
      & Z  h( l+ ~9 M9 Q8 d9 M
    19.                         message = "1";
      1 |( D# z3 M/ j2 Y8 a
    20.                 }8 x; n( Z! W$ R9 U5 F! U& g/ ~
    21.                 return SUCCESS;
      % @( }/ z+ H4 p, b5 t
    22.         }
      ( {" d" j: g# m7 B
    23.         
      $ z7 S: `$ Y* n1 \) _5 R* S5 G
    24.         public void setMessage(String message) {
      / N5 v/ F2 Z/ e, }5 G
    25.                 this.message = message;
      ' X' n7 g# G& T* e$ ^8 A+ T
    26.         }6 I4 s4 o0 A# z
    27.         public String getMessage() {2 z; A$ w0 E# e+ A
    28.                 return message;1 E8 ^: ], [+ {7 I3 Q: Z0 z
    29.         }
      ( z7 U. q$ ^$ a7 b4 `7 Z7 w

    30. 7 q' R* C" `( W1 P
    31.         public void setUserName(String userName) {
      / L1 U2 \6 H$ e. `! t: [9 @5 u# k
    32.                 this.userName = userName;2 P; {# H; @  ]& q  J/ |, B
    33.         }
      8 b7 J, m: g8 R7 v8 w

    34. * l. {) R" C+ F. w. q7 V8 O
    35.         public void setPassword(String password) {
      3 v1 u5 ^" S3 I& U2 G+ v7 K
    36.                 this.password = password;6 X8 A4 S! U: K9 `" n: s0 V$ m. O
    37.         }- I+ n7 @; `5 `
    38. }6 B& E) d& \# N& Z$ _$ d
    复制代码

    $ v' T# U" h& C, b6 h1 O5 Y# {  b  |; k  V% A' N7 Y1 v5 _0 Z2 I
    login.jsp
    ! ]; \' n' h; b+ q4 U6 m
    1. <script>. |- E: H3 _" l( \1 {& o* ~; y# ?
    2. var path = '<%=basePath %>';! J2 v- W9 e: R  b2 P
    3. function login(){8 g" k2 I% t: W2 w: r: T, u5 U$ _
    4.         var username = $("#username").val();$ ~# R, b: K; B* C
    5.         var password = $("#password").val();
      0 s% i* O8 ^7 l
    6.         var data =  {username:username,password:password};# [7 l, n0 s+ j, m
    7.         $.ajax({
      , L0 p; g6 i1 i* @3 w9 t* w0 q
    8.                 type:"post",# g0 w( V( |3 ]1 N7 G7 z& C
    9.                 url:path+"userAction_login.action",
      7 H7 ]" Z! z" P4 P# F
    10.                 data:data,
      ; _/ T- |# b  F! F
    11.                 dataType:"json",
      ) c2 c6 W& ]8 E) s0 ~% W
    12.                 async : false,% o2 U5 l7 ?- Q9 q$ e* o! d
    13.                 success : function(data) {
      : f( _; P4 O6 l: p8 |* f
    14.             if(data==="0"){
      ! |5 \" v1 x, W- V7 x+ h
    15.                     alert("登录成功");
      & G2 D! u. t) m0 i. |3 h
    16.                     window.location.href ="http://blog.52itstyle.com";7 ?: h2 J9 J. [+ T0 L. u/ m
    17.             }else{0 }! u4 U- ^0 d' d% y3 {
    18.                     alert("登录失败");
      $ h8 I3 E: P" {  I+ @
    19.             }3 X/ o- |# y! x- X
    20.                 }8 r. _; i$ O% E! E. V
    21.         });
      : L( G9 ]3 f  s; m' j; O
    22.         
      # F, w& w3 T8 d+ }, v/ L/ Z) |
    23. }& C) y& c1 b6 E) P; F, B6 }6 y
    24. 9 c+ B# h( B) s' h" e4 K, B
    25. </script>
    复制代码

    ' n% Z- q5 R: I5 f- o: h页面展示:
    9 F* O4 {7 Y8 f8 Z# E' w% _0 ?3 _' `7 w& b; |

    ) j" p- m+ F' ^; V5 L
    ' U4 A( u6 \0 W 基于Sturts2实现一个简单的登录功能.txt (64 Bytes, 下载次数: 2, 售价: 1 IT币)
    4 ]& W! }0 a( x( S# J

    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表