用户登陆,退出等基本Action
用户登陆页面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"> </td>
</tr>
<tr>
<td height=""> </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=""> </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的更多相关文章
- 基于用户登陆的struts2中action的分类详解
在struts2中action的分类有:继承 ActionSupport 实现 Action,模型驱动(ModelDriven)的 Action,多方法的 Action三种方式. 1.继承 Actio ...
- laravel前后端分离的用户登陆 退出 中间件的接口与session的使用
在项目开发的过程中,需要有用户的登陆 退出 还有校验用户是否登陆的中间件; 基本思路: 登陆: 前端请求接口的参数校验 用户名 密码规则的校验 用户名密码是否正确的校验; 如果上面的校验都通过的了,把 ...
- [PHP] - Laravel - 用户登陆中间件
前言 Laravel 4中,可以使用Route::filter,而在Laravel 5中,没有了filter.php文件,官方建议使用中间件做. 下面是用户登陆的测试例子,涉及到的一些方法和使用,先参 ...
- [PHP]用户登陆中间件
Laravel 4中,可以使用Route::filter,而在Laravel 5中,没有了filter.php文件,官方建议使用中间件做. 下面是用户登陆的测试例子,涉及到的一些方法和使用,先参见这里 ...
- linux 用户管理修改用户信息、密码状态、删除用户、退出登陆、切换用户
修改用户信息usermoduseradd支持的选项usermod都支持passwd有两个选项-l(在密码串前面加了两个叹号),-u,usermod有两个选项:-L 临时锁定用户(Lock)(在密码串前 ...
- Flask-Login用户登陆
Flask-Login Flask-Login 提供用户会话管理,处理常见的登录.退出和注册的任务. Flask-Login 没有绑定数据库,可以从数据库回调用户对象. 安装flask-login p ...
- Spring MVC - 拦截器实现 和 用户登陆例子
1.拦截器 SpringMvc中的拦截器实现了HandlerInterceptor接口,通常使用与身份认证,授权和校验,模板视图,统一处理等: public class HanderIntercept ...
- Django之博客系统:用户登陆
使用django有一个好处就是有各种各样的框架可以拿来直接使用.相比flask,django自带的框架确实要多很多.比如这一章就要介绍的用户登录.Django拥有一个内置的认证(authenticat ...
- IOS开发之记录用户登陆状态
上一篇博客中提到了用CoreData来进行数据的持久化,CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登 ...
随机推荐
- 设计模式--观察者(Observer)
GOF给出的定义: Define a one-to-many dependency between objects so that when one object changes state, all ...
- CentOS7 定时检测进程占用内存大小,执行重启进程操作(xjl456852原创)
在使用CentOS时,个别程序的进程会一直增大,直到宕机.但是这种程序本身有没有更好的版本使用(比如ngrok免费就这样,付费的就没这个问题),所以想写一个脚本定时检测一下这个程序的情况,决定是否需要 ...
- js笔记01
js编写页面特效动态脚本类型的语言变量:存储数据(日常生活中的东西,比如电视,手机,电脑,出生年份...)语法: var obj=value; obj不能为数字开头,且区分大小写 value对应数据类 ...
- js高级程序设计(第三版)学习笔记(第一版)
ecma:欧洲计算机制造商协会iso/iec:国际标准化和国际电工委员会 dom级别(10*)文档对象模型1:DOM核心(映射基于xml文档)与dom html(在dom核心基础上)2:对鼠标,事件, ...
- JavaScript 数组的遍历
var a = [1, 2, 3]; // for循环 for(var i = 0; i < a.length; i++) { console.log(a[i]); } // while循环 v ...
- Linux gdb调试入门
没有使用过gdb调试过程序的觉得gdb是个很神奇的东东,如果你使用它调试一次保证你想忘记它都难,下面看看它的庐山真面目吧! GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具. ...
- c#基础: 线程的初级用法总结
启动一个线程的两种方法: a.使用无参的方法 Thread thread1 = new Thread(new ThreadStart("调用的方法名")): ...
- 设置单选的listView或者gridview
主要是这个BeaseAdapter的方法notifyDataSetChanged()的使用;作用 :调用BaseAdapter中的getView();方法,刷新ListView中的数据.实现:1.在B ...
- SVG 路径(path)
本文转自:https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial/Paths <path>元素是SVG基本形状中最强大的一个,它 ...
- SuperSocket学习笔记(二)
上一篇博客SuperSocket学习笔记(一)说明了怎么快速搭建一个服务器端,这篇文章我想深挖一下SuperSocket 1. 每一个客户端连接到服务器端时,服务器端会将客户端的信息保存到一个Sess ...