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

接上一篇:http://blog.csdn.net/acmman/article/details/49614841

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

我们找到左边菜单页,给它加链接:

<dl class="">
     <dt><a class="yh" href="${ctx }tax/role_listUI.action" target="mainFrame"><b></b>角色管理<s class="down"></s>
    </a></dt>
</dl>
<dl class="">
    <dt><a class="yh" href="${ctx }tax/user_listUI.action" target="mainFrame"><b></b>用户管理<s class="down"></s>
    </a></dt>
</dl>

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

效果:


接下来我们要添加登录功能:
我们把工程原来的默认欢迎界面(WEB-INF下面的index.jsp)改为我们的登录界面。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
response.sendRedirect(basePath+"sys/login_toLoginUI.action");
%>

可以看到我们让index.jsp去跳转到sys/login_toLoginUI.action,我们下面来实现这个action:

package cn.edu.hpu.tax.login.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{

	//跳转到登录页面
	public String toLoginUI(){
		return "loginUI";
	}

}

然后写它的struts配置文件login-struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="login-action" namespace="/sys" extends="base-default">
		<action name="login_*" class="cn.edu.hpu.tax.login.action.LoginAction" method="{1}">
			<result name="{1}">/WEB-INF/jsp/{1}.jsp</result>
			<result name="loginUI">/WEB-INF/jsp/loginUI.jsp</result>
		</action>
	</package>
</struts>

将配置文件加入到struts总配置文件中:

<!-- 登录跳转的struts配置文件 -->
<include file="cn/edu/hpu/tax/login/conf/login-struts.xml"/>

然后加入我们的登录页面loginUI.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
request.setAttribute("ctx", path);
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
<link href="${ctx}/css/login.css" type="text/css" rel="stylesheet">
<script type="text/javascript">

function logins(){
	document.forms[0].submit();
}

function setClean(){
	document.getElementById("account").value = "";
	document.getElementById("password").value = "";
}

//解决子框架嵌套的问题
if(window != window.parent){
	window.parent.location.reload(true);
}

</script>
<style type="text/css">
html { overflow-y: hidden;  }

.password{
      background-color:#f1f3f6;
	  border:1px solid #f1f3f6;
	  font-color:#ccc;
}

#Layer1 {
	position:absolute;
	left:224px;
	top:479px;
	padding-top:5px;
	width:99px;
	height:21px;
	background-color:#fff;
	z-index:1;
}
.password1 {
	 background-color:#f1f3f6;
	  border:1px solid #f1f3f6;
	  font-color:#ccc;
}

.youbian input{ border:0px none; background-color:transparent; color:#555;padding-left:10px;font-size:16px;width:100%;overflow: hidden;}
</style>
    <!--[if IE 6]>
    <script type="text/javascript" src="${ctx}/ehome/js/DD_belatedPNG.js" ></script>
    <script type="text/javascript">
        DD_belatedPNG.fix('b, s, img, span, .prev, .next, a, input, .youbian, td');
    </script>
    <![endif]-->
</head>
<body scroll="no">
<s:form name="form1" namespace="/sys" action="login_login">
<div id="lo_tf">
<div class="outside">
    <div class="head">
      <table width="1000" height="60" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
          <td width="840" align="left"><img src="${ctx}/images/login/form_03.png"   width="332" height="47"/></td>
          <td align="center">  <a href="#"></a></td>
        </tr>
      </table>
    </div>
    <div class="main2">
	   <div class="content">
	   <div class="youbian">
	    <table width="251" border="0" cellpadding="0" cellspacing="0">
          <tr>
            <td height="12"> </td>
          </tr>
          <tr>
           <td height="45" align="left"></td>
          </tr>
          <tr>
          	<td height="13"> 
            	<span><div height=20 valign="middle" style="padding-left: 18px"><font color="red" id="errMsg"><s:property value="loginResult"/></font></div></span>
            </td>
          </tr>
          <tr>
            <td height="40">
			<table width="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    	<td height="32" align="left"><span style="color:#767676;font-size:14px;">帐号:</span></td>
  </tr>
</table>

			<table width="100%" height="39" border="0" cellpadding="0" cellspacing="0">
              <tr>
                <td background="${ctx}/images/login/shuru_03.png" width=""><table width="100%" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                    <td align="left">
                    <s:textfield id="account" name="user.account" cssClass="password1" cssStyle="color: #767676" size="31"/>
                    </td>
                  </tr>
                </table></td>
              </tr>
            </table></td>
          </tr>
		    <tr>
            <td height="10"><table width="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td height="32" align="left"><span style="color:#767676;font-size:14px;">密  码:</span></td>
  </tr>
</table></td>
          </tr>
          <tr>
            <td height="40"><table width="100%" height="39" border="0" cellpadding="0" cellspacing="0">
              <tr>
                <td background="${ctx}/images/login/shuru_03.png"><table width="100%" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                    <td align="left">
                    	<s:password id="password" name="user.password" cssClass="password"  cssStyle="color: #767676" size="31"/>
                    </td>
                  </tr>
                </table></td>
              </tr>
            </table></td>
          </tr>

		   <tr>
            <td height="10"> </td>
          </tr>
          <tr>
            <td height="40"><table width="100%" border="0" cellpadding="0" cellspacing="0">
              <tr>
                <td align="right"><a href="#" onclick="javascript:logins();"><img src="${ctx}/images/login/form_15.png" width="95" height="37"/></a></td>
                <td width="18"> </td>
                <td align="left"><img src="${ctx}/images/login/form_17.png" width="95" height="37" onclick="setClean()"/></td>
              </tr>
            </table></td>
          </tr>
        </table>

	  </div>
       </div>
   </div>
	<div class="foot">版权所有 | 国税局  2014年</div>
</div>
</div>
</s:form>
</body>
</html>

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

跳转至登录页面成功。

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

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

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

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

下面编码实现:
首先在LoginAction中实现我们的登录检测方法:

//登录
public String login(){
	if(user!=null){
		if(StringUtils.isNoneBlank(user.getAccount())
				&&StringUtils.isNoneBlank(user.getPassword())){
			//根据用户的账号和密码查询用户列表
			List<User> list=userService.findUserByAccountAndPassword(user.getAccount(),user.getPassword());
			if(list!=null&&list.size()>0){//说明登录成功
				//1、登录成功
				User user=list.get(0);
				//1.1、***
				//1.2、将用户信息保存到session中
				ServletActionContext.getRequest().getSession().setAttribute(Constant.USER, user);
				//1.3、将用户登录记录到日志文件
				Log log=LogFactory.getLog(getClass());
				log.info("用户名称为:"+user.getName()+"的用户登录了系统");
				//1.4、重定向跳转到首页
				return "home";
			}else{
				loginResult="账号或密码不正确!";
			}
		}else{
			loginResult="账号或密码不能为空!";
		}
	}else{
		loginResult="请输入账号和密码!";
	}
	return toLoginUI();
}

我们的loginResult设为LoginAction的成员参数,并且设置了set和get方法。当我们登录失败了,这个错误提示信息就将在域中,在页面显示错误的地方放置这个信息:

<s:property value="loginResult"/>

其中的常量Constant.USER被定义在Constant类中:

public class Constant {

	//系统中用户在session中的内容
	public static String USER="SYS_USER";
	//其它常量省略
}

然后在login-strust.xml配置文件中配置我们的home跳转页面:

<result name="home" type="redirectAction">
	<param name="actionName">home</param>
</result>

上面的登录方法中还有findUserByAccountAndPassword(user.getAccount(),user.getPassword());没有定义,我们在UserService中定义这个方法,然后在UserServiceImpl中实现这个方法:

@Override
public List<User> findUserByAccountAndPassword(String account,
		String password) {

	return userDao.findUserByAccountAndPassword(account,password);
}

我们在UserDao中定义findUserByAccountAndPassword()这个方法,然后在UserDaoImpl中实现这个方法:

@Override
public List<User> findUserByAccountAndPassword(String account,
		String password) {
	 Query query=getSession().createQuery("FROM User WHERE account=? AND password=?");
	 query.setParameter(0, account);
	 query.setParameter(1, password);
	return query.list();
}

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

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

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

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

至此我们的登录方法完成,但是我们还要处理一些细节(注销等功能)。下篇总结再赘述。

转载请注明出处:http://blog.csdn.net/acmman/article/details/49614941

时间: 2024-11-01 12:35:58

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

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

我们做完了用户与角色的分配,在设置用户在相应的角色下的操作之前,我们先完成用户的登录功能. 首先,我们先加载我们的系统的首页和子首页.很简单,就是转发到一个jsp页面而已,我们先写一个HomeAction来设置跳转功能: package cn.edu.hpu.tax.core.action; import com.opensymphony.xwork2.ActionSupport; public class HomeAction extends ActionSupport{ //跳转到首页 pu

【SSH项目实战】国税协同平台-17.权限鉴定&amp;amp;解决登录嵌套

我们上一次完成了登录功能和session用户信息的保存和注销.下面我们完成登陆后有关权限鉴定的功能. 我们系统分了5大子系统,粗粒度的分了5个权限. 用户只要有对应系统的权限才可以访问相应的子系统.超级管理员可以访问所有子模块,一般的用户可能只能访问"我的空间". 我们下面就来做一个权限鉴定,我们画个图来设计一下: 接下来编码实现: 我们要修改我们过滤器的代码 @Override public void doFilter(ServletRequest servletRequest, S

【SSH项目实战】国税协同平台-1.项目介绍

项目介绍 1.1项目背景 国税协同办公平台包括了行政管理.后勤服务.在线学习.纳税服务.我的空间等几个子系统:我们本次主要的开发功能是纳税服务子系统的部分模块和基于纳税服务子系统信息的个人工作台首页.纳税服务子系统是办税PC前端或移动端的后台管理系统,主要包括的功能有系统角色管理.用户管理.信息发布管理.投诉受理.纳税咨询.易告知.服务预约.服务调查等模块. 系统的主界面: 我们要做的模块界面: 1.2项目前期 项目前期:一般是由客户经理从客户那边了解到有关该项目的招标信息,然后开发公司再组织竞

【SSH项目实战】国税协同平台-16.登录过滤器

我们上一次做完了登录功能,也将登录信息保存在了session中,接下来我们来继续完善我们的登录部分. 我们先来验证一下之前我们的用户信息是否保存在session中,我们在主系统的首页来显示用户的信息: 这个位置如果出现了用户的信息,说明我们的session封装信息成功! 我们在主页的欢迎xxx部分添加session中保存的user的name值的显示: <td align="right"> <a><b></b><font color=

【SSH项目实战】国税协同平台-3.资源文件分类&amp;amp;log4j&amp;amp;抽取BaseAction

上次我们搭建了SSH框架的环境,然后做了单元测试,下面我们继续来完善我们工厂的准备工作. 3.1资源文件分类 (1)将配置文件归类到新建config文件夹: (2)源代码目录按照功能模块进行划分:cn.edu.hpu.子系统.功能模块.* (3)Jsp放置到WEB-INF目录下: (4)其它: 新建一个test源文件架(Source Folder),我们把上次所有测试的代码全部移入test文件夹下,然后专门为配置文件创建一个conf源文件夹,将配置文件移入,然后src中先建立一个包准备放新写的代

【SSH项目实战】国税协同平台-31.我要投诉功能1

我们之前完成了投诉回复和保存功能,这次我们将要完成历史受理信息的显示 以及数据回显功能,当然还有用户编写投诉信息的入口,我们这次继续. 可以注意到,在deilUI.jsp上我们之前的投诉人信息显示,不管是匿名还是不匿名,投诉人的姓名.手机号码都是显示出来的: <tr> <td class="tdBg">投诉人姓名:</td> <td><s:property value="complain.compName"/&g

【SSH项目实战】国税协同平台-4.用户管理需求分析&amp;amp;CRUD方法1

上次我们完成了日志模块的配置和基础增删改查类,下面我们根据用户的需求来正式开发项目的业务模块. 下面我们主要来开发系统用户管理的模块 我们有用户的功能说明书,打开功能说明书来看看这个模块需要什么功能: 功能说明 用户管理:可以根据用户名查询系统用户:在页面中点击"新增"可以添加用户.点击删除可以批量删除选中的用户."导出"则导出所有的用户列表到excel文件中并弹出下载提示框给用户下载:"导入"将需要用户将本地的用户列表按照一定格式将excel中

【SSH项目实战】国税协同平台-2.环境搭建和整合

框架整合 2.1新建数据库及web项目 2.1.1创建itcastTax数据库 -- 创建数据库 CREATE DATABASE itcastTax DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 我们使用的是Mysql数据库 2.1.2新建web项目 新建工作空间指定项目编码(或工作空间编码)为utf-8,再建 web project,配置buildpath 添加jstl的jar包和mysql驱动包:javax.servlet.jsp.j

【SSH项目实战】国税协同平台-7.POI导入用户列表文件

上次我们使用POI技术完成了用户列表的打印工作,下面我们来完成用户列表Excel文件的导入. 我们要导入这个Excel文件到我们的系统中: 确切的说,是我们要将excel中的数据导入到数据库中保存起来 我们的操作过程: 1.获取excel文件 2.导入 2.1.读取工作簿 2.2.读取工作表 2.3.读取行 2.4.读取单元格 2.5.保存用户 下面我们来进行具体的实现工作 我们在用户列表的jsp页面中可以看到还有一个"导出"的按钮, <input type="butt