用户登陆页面user_login.jsp对应action为login.do:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>用户登陆</title>
<script type="text/javascript">
function confirmCodeNew(o){
o.src="<s:url action='confirm' namespace='/validation'/>";
}
</script>
</head> <body>
<form id="loginform" name="loginform" method="post" action="<s:url action='process'/>" onsubmit="return checkLoginForm();">
<table width="" height="" border="" cellpadding="" cellspacing="" class="table3">
<tr>
<td colspan=""><span class="font_red"><s:actionerror/></span></td>
</tr>
<tr>
<td width="" height="" align="right" valign="middle" class="font06">用户名:</td>
<td colspan="" align="left" valign="middle"><input type="text" name="username" id="username" tabindex="" /></td>
</tr>
<tr>
<td width="" height="" align="right" valign="middle" class="font06">密 码:</td>
<td colspan="" align="left" valign="middle"><input type="password" name="pwd" id="pwd" tabindex="" /></td>
</tr>
<tr>
<td width="" height="" align="right" valign="middle" class="font06">验证码:</td>
<td width="" align="left" valign="middle"><input name="confirm_code" type="text" class="table3" size="" maxlength="" /></td>
<td width=""><img src="<s:url action='confirm' namespace='/validation'/>" onclick="confirmCodeNew(this)" style="cursor:pointer" /></td>
<td width="" align="left" valign="middle" class="font06">&nbsp;</td>
</tr>
<tr>
<td height="">&nbsp;</td>
<td colspan="" align="left" valign="middle"><input type="checkbox" name="rember_me" onclick="remeber_me_change(this);"/>
<span class="font06">记住用户名</span></td>
</tr>
<tr>
<td height="">&nbsp;</td>
<td height="" colspan="" align="left" valign="middle"><img src="<s:url value='/images/3vsxdt_36.gif'/>" onclick="checkLoginForm()" style="cursor:pointer" width="" height="" border="" /></td>
</tr>
</table>
</form>
</body>
</html>

用户登陆类(UserLogin.java):

package com.web.struts.action;

import javax.servlet.http.Cookie;

import org.apache.commons.lang.StringUtils;

import commodel.Member;
import com.service.IMemberService;
import com.tools.Constant;
import com.tools.MD5Bean; /**
* title:用户登陆
*
* @author conkeyn
* @时间 2009-3-24:上午10:06:25
*/
public class UserLogin extends BaseAction { /** */
private static final long serialVersionUID = -8059803575427183277L; private Member member; public void setMemberService(IMemberService memberService) {
this.memberService = memberService;
} private IMemberService memberService; /**
* 退出
*
* @return
*/
public String logout() {
getSession().removeAttribute(Constant.MEMBER_SESSION_ID);
Cookie[] cookies = getRequest().getCookies();
Cookie member_cookie = null;
for (int i = 0; i < cookies.length; i++) {
member_cookie = cookies[i];
if (member_cookie != null
&& StringUtils.isNotBlank(member_cookie.getName())
&& StringUtils.isNotBlank(member_cookie.getValue())
&& member_cookie.getName().equals(
Constant.MEMBER_SESSION_ID)) {
member_cookie.setMaxAge(-1);// 设置有效期为-1秒,浏览器会自动删除
getResponse().addCookie(member_cookie);
break;
}
}
return SUCCESS;
} /**
* 用户登陆
*
* @return
*/
public String login() { return "login";
} /**
* 处理用户登陆
*
* @return
*/
public String process() {
String confirm_code = getRequest().getParameter("confirm_code");
String confirmcode = (String) getSession().getAttribute("confirmcode");
if (StringUtils.isNotBlank(confirm_code)
&& StringUtils.isNotBlank(confirmcode)
&& confirm_code.equals(confirmcode)) {
String username = getRequest().getParameter("username");
String pwd = getRequest().getParameter("pwd");
String rember_me = getRequest().getParameter("rember_me");
MD5Bean md5 = new MD5Bean();
pwd = md5.MD5Encrypt(pwd);
member = memberService.getMember(username);
if (member == null) {
this.addActionError("不存在该用户,请注册后再登陆!");
return ERROR;
} else if (!pwd.equalsIgnoreCase(member.getPwd())) {
this.addActionError("密码错误,请重新输入!");
return ERROR;
}
getSession().setAttribute(Constant.MEMBER_SESSION_ID,
member.getUsername());
// 设置cookie
if (StringUtils.isNotBlank(rember_me)
&& rember_me.equalsIgnoreCase("true")) {
Cookie cookie = new Cookie(Constant.MEMBER_SESSION_ID, member
.getUsername());
cookie.setMaxAge(60 * 60 * 24 * 365);
getResponse().addCookie(cookie);
}
member.setLoged(true);
memberService.saveMember(member);
} else {
this.addActionError("验证码错误,请重新输入!");
return ERROR;
}
return SUCCESS;
} public Member getMember() {
return member;
} public void setMember(Member member) {
this.member = member;
} }

Struts配置文件(struts-login.xml):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
<package name="login" extends="struts-default">
<!-- 登陆 -->
<action name="login" class="memberAction" method="login">
<result name="login" type="dispatcher"> /WEB-INF/pages/userlogin.jsp
</result>
</action>
<action name="logout" class="memberAction" method="logout">
<result name="success" type="redirectAction">login</result>
</action>
<action name="process" class="memberAction" method="process">
<result name="error" type="dispatcher">/WEB-INF/pages/userlogin.jsp
</result>
<result name="success" type="dispatcher">/WEB-INF/pages/userlogin_msg.jsp
</result>
</action>
</package>
</struts>

用户登陆,退出等基本Action的更多相关文章

  1. 基于用户登陆的struts2中action的分类详解

    在struts2中action的分类有:继承 ActionSupport 实现 Action,模型驱动(ModelDriven)的 Action,多方法的 Action三种方式. 1.继承 Actio ...

  2. laravel前后端分离的用户登陆 退出 中间件的接口与session的使用

    在项目开发的过程中,需要有用户的登陆 退出 还有校验用户是否登陆的中间件; 基本思路: 登陆: 前端请求接口的参数校验 用户名 密码规则的校验 用户名密码是否正确的校验; 如果上面的校验都通过的了,把 ...

  3. [PHP] - Laravel - 用户登陆中间件

    前言 Laravel 4中,可以使用Route::filter,而在Laravel 5中,没有了filter.php文件,官方建议使用中间件做. 下面是用户登陆的测试例子,涉及到的一些方法和使用,先参 ...

  4. [PHP]用户登陆中间件

    Laravel 4中,可以使用Route::filter,而在Laravel 5中,没有了filter.php文件,官方建议使用中间件做. 下面是用户登陆的测试例子,涉及到的一些方法和使用,先参见这里 ...

  5. linux 用户管理修改用户信息、密码状态、删除用户、退出登陆、切换用户

    修改用户信息usermoduseradd支持的选项usermod都支持passwd有两个选项-l(在密码串前面加了两个叹号),-u,usermod有两个选项:-L 临时锁定用户(Lock)(在密码串前 ...

  6. Flask-Login用户登陆

    Flask-Login Flask-Login 提供用户会话管理,处理常见的登录.退出和注册的任务. Flask-Login 没有绑定数据库,可以从数据库回调用户对象. 安装flask-login p ...

  7. Spring MVC - 拦截器实现 和 用户登陆例子

    1.拦截器 SpringMvc中的拦截器实现了HandlerInterceptor接口,通常使用与身份认证,授权和校验,模板视图,统一处理等: public class HanderIntercept ...

  8. Django之博客系统:用户登陆

    使用django有一个好处就是有各种各样的框架可以拿来直接使用.相比flask,django自带的框架确实要多很多.比如这一章就要介绍的用户登录.Django拥有一个内置的认证(authenticat ...

  9. IOS开发之记录用户登陆状态

    上一篇博客中提到了用CoreData来进行数据的持久化,CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登 ...

随机推荐

  1. Javascript 文件操作(整理版)

    Javascript 文件操作 一.功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象.在详细介绍 ...

  2. Javscript中的null和undefined

    1.null是JavaScript关键字,含义是“非对象”,它可以表示数字.字符串和对象是“无值”的. var x = null; typeof x ;//返回“object” var x=null, ...

  3. hdu Repositoryti

    算法:字典树 题意:给你一些字符串,然后会有一些询问,输出询问在给定的字符串中出现了多少次(字串也是): 例如 add,子串有:a ,d,d,ad ,dd,add:你会发现子串d出现了两次,那么怎么办 ...

  4. shell中的双括号表达式

    语法格式 (( expression )) expression可以是任何数学表达式,可以包含的操作符有: +  加 - 减 * 乘(无需转义) / 除 % 取余 ** 指数 == 等于 != 不等 ...

  5. Arbitrage HDU

    Arbitrage                                              Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  6. 电脑文本text和部分文字出现其他语言乱码

     1.文本的编码存在问题 解决办法: 将text文件打开>>文件(左上角)>>另存为>>选择其他格式的编码试试(在保存键左侧)>>保存再打开 2.系统区 ...

  7. 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】

    1.下载相关软件,并解压 版本号如下: (1)apache-nutch-2.3 (2) hadoop-1.2.1 (3)hbase-0.92.1 (4)solr-4.9.0 并解压至/opt/jedi ...

  8. html中embed标签的用法

    (一).基本语法: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等,Netscape及新版的IE 都支持.url为音频或视 ...

  9. JS创建对象的七大模式

    1. 工厂模式 function createPerson(name, age, job){var o = new Object();o.name = name;o.age = age;o.job = ...

  10. 递归:这帮坑爹的小兔崽子 - 零基础入门学习Python023

    递归:这帮坑爹的小兔崽子 让编程改变世界 Change the world by program 斐波那契数列的递归实现 这节课我们用斐波那契(Fibonacci)数列的递归实现来作为第一个例子吧,斐 ...