OA权限模块登录和注销

    这篇博文为大家简单的介绍一下OA权限模块中的登录和注销功能。功能很简单,但是几乎每个系统都离不开。

        

    一、编写UserAction和UserService


    UserAction类:

package cn.tgb.oa.struts2.action;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;

import cn.tgb.oa.base.BaseAction;
import cn.tgb.oa.domain.Role;
import cn.tgb.oa.domain.User;

@Controller
@Scope("prototype")
public class UserAction extends BaseAction<User>{
	
	/**
	 * 列表
	 */
	public String list(){
		//1.从数据库中查询所有User
		List<User> users = new ArrayList<User>();
		users = userService.findAll();
		
		//2.将users实体放到actionContext中
		ActionContext.getContext().put("userList", users);
		return "list";
	}
	
	
	/** 登录页面 */
	public String loginUI() throws Exception {
		return "loginUI";
	}

	/** 登录 */
	public String login() throws Exception {
		User user = userService.findByLoginNameAndPassword(model.getLoginName(), model.getPassword());
		if (user == null) {
			addFieldError("login", "用户名或密码不正确!");
			return "loginUI";
		} else {
			// 登录用户
			ActionContext.getContext().getSession().put("user", user);
			return "toIndex";
		}		
	}

	/** 注销 */
	public String logout() throws Exception { 
		ActionContext.getContext().getSession().remove("user");
		return "logout";
	}	

}


        UserService类:

package cn.tgb.oa.service.impl;

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.oa.base.DaoSupportImpl;
import cn.itcast.oa.domain.User;
import cn.itcast.oa.service.UserService;

@Service
@Transactional
public class UserServiceImpl extends DaoSupportImpl<User> implements UserService {

	public User findByLoginNameAndPassword(String loginName, String password) {
		// 使用密码的MD5摘要进行对比
		String md5Digest = DigestUtils.md5Hex(password);
		return (User) getSession().createQuery(//
				"FROM User u WHERE u.loginName=? AND u.password=?")//
				.setParameter(0, loginName)//
				.setParameter(1, md5Digest)//
				.uniqueResult();
	}
}

        二、配置Struts.xml文件


		<!-- 4.4用户管理 -->
		<action name="user_*" class="userAction" method="{1}">
			<result name="list">/WEB-INF/jsp/userAction/list.jsp</result>
			<result name="saveUI">/WEB-INF/jsp/userAction/saveUI.jsp</result>
			<result name="toList" type="redirectAction">department_list</result>
		
			<result name="loginUI">/WEB-INF/jsp/userAction/loginUI.jsp</result>
			<result name="logout">/WEB-INF/jsp/userAction/logout.jsp</result>
			<result name="toIndex" type="redirect">/index.jsp</result>		
		</action>


        三、编写loginUI.jsp文件


<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>Itcast OA</title>
<%@ include file="/WEB-INF/jsp/public/commons.jspf"%>
<link href="${pageContext.request.contextPath}/style/blue/login.css"
	type=text/css rel=stylesheet>
	<script type="text/javascript">
		$(function(){
			document.forms[0].loginName.focus();
		});

		// 在被嵌套时就刷新上级窗口
		if(window.parent != window){
			window.parent.location.reload(true);
		}
	</script>
</head>

<body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0
	class=PageBody>
	<!-- 显示表单 -->
	<s:form action="user_login" focusElement="loginNameInput">
		<div id="CenterAreaBg">
			<div id="CenterArea">
				<div id="LogoImg">
					<img border="0"
						src="${pageContext.request.contextPath}/style/blue/images/logo.png" />
				</div>
				<div id="LoginInfo">
					<table BORDER=0 CELLSPACING=0 CELLPADDING=0 width=100%>
						<tr>
							<td colspan="3">
								<!-- 显示错误 --> <font color="red"><s:fielderror /></font>
							</td>
						</tr>
						<tr>
							<td width=45 class="Subject"><img border="0"
								src="${pageContext.request.contextPath}/style/blue/images/login/userId.gif" /></td>
							<td><s:textfield name="loginName" size="20" tabindex="1"
									cssClass="TextField required" id="loginNameInput" /></td>
							<td rowspan="2" style="padding-left:10px;"><input
								type="image" tabindex="3"
								src="${pageContext.request.contextPath}/style/blue/images/login/userLogin_button.gif" />
							</td>
						</tr>
						<tr>
							<td class="Subject"><img border="0"
								src="${pageContext.request.contextPath}/style/blue/images/login/password.gif" /></td>
							<td><s:password name="password" id="aa" size="20"
									tabindex="2" showPassword="false" cssClass="TextField required" /></td>
						</tr>
					</table>
				</div>
				<div id="CopyRight">
					<a href="javascript:void(0)">&copy; 2010 版权所有 </a>
				</div>
			</div>
		</div>
	</s:form>
</body>

</html>


        四、编写logout.jsp文件


<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
	<title>您已退出Itcast OA系统</title>
     <%@ include file="/WEB-INF/jsp/public/commons.jspf" %>
	<link href="${pageContext.request.contextPath}/style/blue/logout.css" rel="stylesheet" type="text/css">
</head>

<body>
	<table border=0 cellspacing=0 cellpadding=0 width=100% height=100%>
		<tr>
			<td align=center>
				<div id=Logout>
					<div id=AwokeMsg>
                        <img id=LogoutImg src="${pageContext.request.contextPath}/style/blue/images/logout/logout.gif" border=0>
                        <img id=LogoutTitle src="${pageContext.request.contextPath}/style/blue/images/logout/logout1.gif" border=0>
                    </div>
					<div id=LogoutOperate>
                        <img src="${pageContext.request.contextPath}/style/blue/images/logout/logout2.gif" border=0> 
                        <a href="${pageContext.request.contextPath}/user_loginUI.action">重新进入系统</a> 
                        <img src="${pageContext.request.contextPath}/style/blue/images/logout/logout3.gif" border=0> 
                        <a href="javascript: window.open('','_self');window.close();">关闭当前窗口</a>
                    </div>
				</div>
			</td>
		</tr>
	</table>
</body>
</html>

             总结:

     这两块主要学习到两个新的知识点,一个是如何把数据库中经过MD5加密的密码解析和用户传过来的密码进行对比来判断密码的对错;第二个就是学习了SSH中使用<s:fielderror>字段对错误消息进行提示。




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值