【SSH项目实战】国税协同平台-15.系统、子系统首页&登录功能2

来源:互联网 发布:网络勒索 编辑:程序博客网 时间:2024/04/30 13:57

我们的子系统界面已经加载出来:



我们找到左边菜单页,给它加链接:
[html] view plaincopy
  1. <dl class="">  
  2.      <dt><a class="yh" href="${ctx }tax/role_listUI.action" target="mainFrame"><b></b>角色管理<s class="down"></s>  
  3.     </a></dt>  
  4. </dl>  
  5. <dl class="">  
  6.     <dt><a class="yh" href="${ctx }tax/user_listUI.action" target="mainFrame"><b></b>用户管理<s class="down"></s>  
  7.     </a></dt>  
  8. </dl>  

我们指定了点击链接之后右侧模块页面的地址。

效果:



接下来我们要添加登录功能:
我们把工程原来的默认欢迎界面(WEB-INF下面的index.jsp)改为我们的登录界面。
[html] view plaincopy
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. response.sendRedirect(basePath+"sys/login_toLoginUI.action");  
  6. %>  

可以看到我们让index.jsp去跳转到sys/login_toLoginUI.action,我们下面来实现这个action:
[java] view plaincopy
  1. package cn.edu.hpu.tax.login.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class LoginAction extends ActionSupport{  
  6.       
  7.     //跳转到登录页面  
  8.     public String toLoginUI(){  
  9.         return "loginUI";  
  10.     }  
  11.       
  12. }  

然后写它的struts配置文件login-struts.xml:
[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
  5.   
  6.   
  7. <struts>  
  8.     <package name="login-action" namespace="/sys" extends="base-default">  
  9.         <action name="login_*" class="cn.edu.hpu.tax.login.action.LoginAction" method="{1}">  
  10.             <result name="{1}">/WEB-INF/jsp/{1}.jsp</result>  
  11.             <result name="loginUI">/WEB-INF/jsp/loginUI.jsp</result>  
  12.         </action>  
  13.     </package>  
  14. </struts>  

将配置文件加入到struts总配置文件中:
[html] view plaincopy
  1. <!-- 登录跳转的struts配置文件 -->  
  2. <include file="cn/edu/hpu/tax/login/conf/login-struts.xml"/>  

然后加入我们的登录页面loginUI.jsp:
[html] view plaincopy
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags" %>  
  3. <%  
  4. String path = request.getContextPath();  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6. request.setAttribute("ctx", path);  
  7. %>  
  8.   
  9.   
  10. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  11. <html>  
  12. <head>  
  13. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  14. <title>登录</title>  
  15. <link href="${ctx}/css/login.css" type="text/css" rel="stylesheet">  
  16. <script type="text/javascript">  
  17.   
  18.   
  19. function logins(){  
  20.     document.forms[0].submit();  
  21. }  
  22.   
  23.   
  24. function setClean(){  
  25.     document.getElementById("account").value = "";  
  26.     document.getElementById("password").value = "";  
  27. }  
  28.   
  29.   
  30. //解决子框架嵌套的问题  
  31. if(window != window.parent){  
  32.     window.parent.location.reload(true);  
  33. }  
  34.   
  35.   
  36. </script>  
  37. <style type="text/css">  
  38. html { overflow-y: hidden;  }  
  39.   
  40.   
  41. .password{  
  42.       background-color:#f1f3f6;  
  43.       border:1px solid #f1f3f6;  
  44.       font-color:#ccc;  
  45. }  
  46.   
  47.   
  48. #Layer1 {  
  49.     position:absolute;  
  50.     left:224px;  
  51.     top:479px;  
  52.     padding-top:5px;  
  53.     width:99px;  
  54.     height:21px;  
  55.     background-color:#fff;  
  56.     z-index:1;  
  57. }  
  58. .password1 {        
  59.      background-color:#f1f3f6;  
  60.       border:1px solid #f1f3f6;  
  61.       font-color:#ccc;  
  62. }  
  63.   
  64.   
  65. .youbian input{ border:0px none; background-color:transparent; color:#555;padding-left:10px;font-size:16px;width:100%;overflow: hidden;}  
  66. </style>  
  67.     <!--[if IE 6]>  
  68.     <script type="text/javascript" src="${ctx}/ehome/js/DD_belatedPNG.js" ></script>  
  69.     <script type="text/javascript">  
  70.         DD_belatedPNG.fix('b, s, img, span, .prev, .next, a, input, .youbian, td');  
  71.     </script>  
  72.     <![endif]-->  
  73. </head>  
  74. <body scroll="no">  
  75. <s:form name="form1" namespace="/sys" action="login_login">  
  76. <div id="lo_tf">  
  77. <div class="outside">  
  78.     <div class="head">  
  79.       <table width="1000" height="60" border="0" align="center" cellpadding="0" cellspacing="0">  
  80.         <tr>  
  81.           <td width="840" align="left"><img src="${ctx}/images/login/form_03.png"   width="332" height="47"/></td>  
  82.           <td align="center">  <a href="#"></a></td>  
  83.         </tr>  
  84.       </table>  
  85.     </div>  
  86.     <div class="main2">  
  87.        <div class="content">    
  88.        <div class="youbian">  
  89.         <table width="251" border="0" cellpadding="0" cellspacing="0">  
  90.           <tr>  
  91.             <td height="12"> </td>  
  92.           </tr>  
  93.           <tr>  
  94.            <td height="45" align="left"></td>  
  95.           </tr>  
  96.           <tr>  
  97.             <td height="13">   
  98.                 <span><div height=20 valign="middle" style="padding-left: 18px"><font color="red" id="errMsg"><s:property value="loginResult"/></font></div></span>  
  99.             </td>  
  100.           </tr>  
  101.           <tr>  
  102.             <td height="40">  
  103.             <table width="100%" border="0" cellpadding="0" cellspacing="0">  
  104.   <tr>  
  105.         <td height="32" align="left"><span style="color:#767676;font-size:14px;">帐号:</span></td>  
  106.   </tr>  
  107. </table>  
  108.   
  109.   
  110.             <table width="100%" height="39" border="0" cellpadding="0" cellspacing="0">  
  111.               <tr>  
  112.                 <td background="${ctx}/images/login/shuru_03.png" width=""><table width="100%" border="0" cellpadding="0" cellspacing="0">  
  113.                   <tr>  
  114.                     <td align="left">  
  115.                     <s:textfield id="account" name="user.account" cssClass="password1" cssStyle="color: #767676" size="31"/>  
  116.                     </td>  
  117.                   </tr>  
  118.                 </table></td>  
  119.               </tr>  
  120.             </table></td>  
  121.           </tr>  
  122.             <tr>  
  123.             <td height="10"><table width="100%" border="0" cellpadding="0" cellspacing="0">  
  124.   <tr>  
  125.     <td height="32" align="left"><span style="color:#767676;font-size:14px;">密  码:</span></td>  
  126.   </tr>  
  127. </table></td>  
  128.           </tr>  
  129.           <tr>  
  130.             <td height="40"><table width="100%" height="39" border="0" cellpadding="0" cellspacing="0">  
  131.               <tr>  
  132.                 <td background="${ctx}/images/login/shuru_03.png"><table width="100%" border="0" cellpadding="0" cellspacing="0">  
  133.                   <tr>  
  134.                     <td align="left">  
  135.                         <s:password id="password" name="user.password" cssClass="password"  cssStyle="color: #767676" size="31"/>  
  136.                     </td>  
  137.                   </tr>  
  138.                 </table></td>  
  139.               </tr>  
  140.             </table></td>  
  141.           </tr>  
  142.             
  143.            <tr>  
  144.             <td height="10"> </td>  
  145.           </tr>  
  146.           <tr>  
  147.             <td height="40"><table width="100%" border="0" cellpadding="0" cellspacing="0">  
  148.               <tr>  
  149.                 <td align="right"><a href="#" onclick="javascript:logins();"><img src="${ctx}/images/login/form_15.png" width="95" height="37"/></a></td>  
  150.                 <td width="18"> </td>  
  151.                 <td align="left"><img src="${ctx}/images/login/form_17.png" width="95" height="37" onclick="setClean()"/></td>  
  152.               </tr>  
  153.             </table></td>  
  154.           </tr>  
  155.         </table>  
  156.           
  157.       </div>     
  158.        </div>  
  159.    </div>  
  160.     <div class="foot">版权所有 | 国税局  2014年</div>  
  161. </div>  
  162. </div>  
  163. </s:form>  
  164. </body>  
  165. </html>  

然后重启服务器,测试登录页面:

跳转至登录页面成功。

我们下面来做登录功能:
我们是这么设计的:

登录:
1、获取帐号和密码
2、通过帐号和密码查询用户表;如果查询有记录说登录成功;否则登录失败跳转到登录页面并且提示用户登录失败信息
2.1、登录成功
2.1.1、将用户信息保存到session中
2.1.2、***
2.1.3、将用户登录记录到日志文件
2.1.4、重定向跳转到首页

2.2、登录失败
     跳转到登录页面并且提示用户登录失败信息

退出(注销):清除session中保存的用户信息

下面编码实现:
首先在LoginAction中实现我们的登录检测方法:
[java] view plaincopy
  1. //登录  
  2. public String login(){  
  3.     if(user!=null){  
  4.         if(StringUtils.isNoneBlank(user.getAccount())  
  5.                 &&StringUtils.isNoneBlank(user.getPassword())){  
  6.             //根据用户的账号和密码查询用户列表  
  7.             List<User> list=userService.findUserByAccountAndPassword(user.getAccount(),user.getPassword());  
  8.             if(list!=null&&list.size()>0){//说明登录成功  
  9.                 //1、登录成功  
  10.                 User user=list.get(0);  
  11.                 //1.1、***  
  12.                 //1.2、将用户信息保存到session中  
  13.                 ServletActionContext.getRequest().getSession().setAttribute(Constant.USER, user);  
  14.                 //1.3、将用户登录记录到日志文件  
  15.                 Log log=LogFactory.getLog(getClass());  
  16.                 log.info("用户名称为:"+user.getName()+"的用户登录了系统");  
  17.                 //1.4、重定向跳转到首页  
  18.                 return "home";  
  19.             }else{  
  20.                 loginResult="账号或密码不正确!";  
  21.             }  
  22.         }else{  
  23.             loginResult="账号或密码不能为空!";  
  24.         }  
  25.     }else{  
  26.         loginResult="请输入账号和密码!";  
  27.     }  
  28.     return toLoginUI();  
  29. }  

我们的loginResult设为LoginAction的成员参数,并且设置了set和get方法。当我们登录失败了,这个错误提示信息就将在域中,在页面显示错误的地方放置这个信息:
[html] view plaincopy
  1. <s:property value="loginResult"/>  

其中的常量Constant.USER被定义在Constant类中:
[java] view plaincopy
  1. public class Constant {  
  2.       
  3.     //系统中用户在session中的内容  
  4.     public static String USER="SYS_USER";  
  5.     //其它常量省略  
  6. }  

然后在login-strust.xml配置文件中配置我们的home跳转页面:
[html] view plaincopy
  1. <result name="home" type="redirectAction">  
  2.     <param name="actionName">home</param>  
  3. </result>  

上面的登录方法中还有findUserByAccountAndPassword(user.getAccount(),user.getPassword());没有定义,我们在UserService中定义这个方法,然后在UserServiceImpl中实现这个方法:
[java] view plaincopy
  1. @Override  
  2. public List<User> findUserByAccountAndPassword(String account,  
  3.         String password) {  
  4.       
  5.     return userDao.findUserByAccountAndPassword(account,password);  
  6. }  

我们在UserDao中定义findUserByAccountAndPassword()这个方法,然后在UserDaoImpl中实现这个方法:
[java] view plaincopy
  1. @Override  
  2. public List<User> findUserByAccountAndPassword(String account,  
  3.         String password) {  
  4.      Query query=getSession().createQuery("FROM User WHERE account=? AND password=?");  
  5.      query.setParameter(0, account);  
  6.      query.setParameter(1, password);  
  7.     return query.list();  
  8. }  

我们来测试:
我们有一个账号和密码是:lixiangyang和554466

点击登录之后成功进入主页!

同时后台输出登录记录并存入Log日志中:


那么我们将密码故意输错,发现又跳转回登录界面并看到了错误信息:


至此我们的登录方法完成,但是我们还要处理一些细节(注销等功能)

0 0
原创粉丝点击