struts2的记住账号密码的登录设计
一个简单的基于struts2的登录功能,实现的额外功能有记住账号密码,登录错误提示。这里写上我在设计时的思路流程,希望大家能给点建设性的意见,帮助我改善设计。
登录功能的制作,首先将jsp界面搭建出来,界面搭建出来之后,我首先想的是如何用cookie来实现记住账号密码,这里我选择的是在class中实现这个cookie。
jsp页面中的checkbox标签作为一个标记参数来判断用户是否选择了记住账号和密码,在登录提交之后,伴随着登录的账号、密码、激活码一起传递到action中,checkbox选中,则传递true,不选中,则不传递。

if(checkbox){
Cookie namecookie = new Cookie("loginName",loginName);//新建cookie对象
Cookie passwordcookie = new Cookie("password",password);
namecookie.setMaxAge(***);//设置cookie对象的有效时间
passwordcookie.setMaxAge(***);
response.addCookie(namecookie);
response.addCookie(passwordcookie);
}
记住账号密码的cookie实现后,我有2个操作要做,一个是判断登录账号是否存在,是否允许登录,还有一个是验证码是否正确。在这里我设计的是先判 断验证码的正确性。因为验证码是为了防止特定程序以暴力破解的方式不断的进行登录尝试。说白了就是用来区分人和电脑的,先判断验证码,验证码错误,则不进 行账户匹配的操作,可以减少程序对数据库的访问,节省资源。验证码正确,再进行账号匹配操作。
String code = (String) ActionContext.getContext().getSession().get("code");//得到系统生成并存储在session中的验证码
if(code!=null&&code.equalsIgnoreCase(yzm)){
admin = adminBiz.loginByNamePassword(loginName,password);
if(admin!=null){
ActionContext.getContext().getSession().put("manager",admin);
return "loginok";//跳转到登录操作页面
}
}
这样一个简单的登录就实现了,但还是有很多问题没有解决,比如我创建了cookie,但没有读取,那记住的账号密码从哪里来显示到登录页面上呢?
我想设计的是在action中用同一个方法来实现读取cookie。也就是我登录提交和显示登录jsp页面访问的都是同一个action的同一个方法。
那我怎么区分它是第一次访问,要显示登录页面而不是要它去判断登录提交呢?
因为我的登录提交是用form表单来实现的,所以我账号密码就算不输值,form表单中的input也会提交""字符给action,但如果我 不是通过form表单来跳转,则不会提交""给action。因此,我就通过判断账号和密码是否为空来区分是第一次访问要显示登录页面还是判断登录情况, 而且我的验证码是在登录页面中显示的,我如果不是通过登录页面去访问这个action,则session中存储的验证码也为空(但不能排除你是重复刷新登 录页面的情况,所以不用session中的验证码)。既然已经能区分第一次访问和提交访问,则当它是第一次访问的时候,判断是否存在cookie,并读取 传递到登录页面显示。
if(loginName==null&&password==null){
loginName = "";
password = "";
Cookie[] cookies = request.getCookies();
if(cookies!=null)
{
checkbox = true;//标记checkbox,传递到登录页面,使checkbox默认勾选
for (int i = ; i < cookies.length; i++)
{
Cookie c = cookies[i];
if(c.getName().equalsIgnoreCase("loginName"))
{
loginName = c.getValue();
}
else if(c.getName().equalsIgnoreCase("password"))
{
password = c.getValue();
}
}
}
return "login";//跳转到登录页面
}
这样登录的记住和读取账号密码就都能实现了。但还缺少登录错误提示,我在action中设计了变量warn,初始值为"",在直接访问action时,不对warn做处理,
若为form表单提交访问,则根据不同的情况赋予warn不同的提示语。
最后,附上完整的action_login方法
private String warn;
private boolean checkbox;
private String loginName;
private String password;
private String yzm;//验证码
private Admin admin;
public String login(){ HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
if(checkbox){
Cookie namecookie = new Cookie("loginName",loginName);//新建cookie对象
Cookie passwordcookie = new Cookie("password",password);
namecookie.setMaxAge(***);//设置cookie对象的有效时间
passwordcookie.setMaxAge(***);
response.addCookie(namecookie);
response.addCookie(passwordcookie);
}
String code = (String) ActionContext.getContext().getSession().get("code");//得到系统生成并存储在session中的验证码
if(loginName==null&&password==null){
loginName = "";
password = "";
Cookie[] cookies = request.getCookies();
if(cookies!=null)
{
checkbox = true;//传递到登录页面,作为标签checkbox默认勾选的判断
for (int i = ; i < cookies.length; i++)
{
Cookie c = cookies[i];
if(c.getName().equalsIgnoreCase("loginName"))
{
loginName = c.getValue();
}
else if(c.getName().equalsIgnoreCase("password"))
{
password = c.getValue();
}
}
}
return "login";//跳转到登录页面
}else if("".equals(loginName)||"".equals(password)){
warn = "用户名或密码不能为空!";
return "login";
}else if(code!=null&&code.equalsIgnoreCase(yzm)){ admin = adminBiz.loginByNamePassword(loginName,password);
if(admin!=null){
ActionContext.getContext().getSession().put("manager",admin);
return "loginok";//跳转到登录成功页面
}else{
warn = "账号或密码错误!";
return "login";
}
}else{
warn = "验证码错误!";
return "login";
}
}
struts2的记住账号密码的登录设计的更多相关文章
- 基于struts2的记住账号密码的登录设计
一个简单的基于struts2的登录功能,实现的额外功能有记住账号密码,登录错误提示.这里写上我在设计时的思路流程,希望大家能给点建设性的意见,帮助我改善设计. 登录功能的制作,首先将jsp界面搭建出来 ...
- 利用SharedPreferences完成记住账号密码的功能
利用SharedPreferences完成记住账号密码的功能 效果图: 记住密码后,再次登录就会出现账号密码,否则没有. 分析: SharedPreferences可将数据存储到本地的配置文件中 Sh ...
- C# ASP.NET MVC:使用Cookie记住账号密码
MVC记住账号密码 使用cookie操作 前端: <div> 用户名:<input type="text" id="UserName" val ...
- Linux让git记住账号密码
Linux让git记住账号密码 ——IT唐伯虎 摘要: Linux让git记住账号密码. 1.进入根目录,指令:cd / 2.创建记录账号密码的文件,指令:touch .git-credentials ...
- eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?
eclipse 中main()函数中的String[] args如何使用? 右击你的项目,选择run as中选择 run configuration,选择arguments总的program argu ...
- css 修改placeholder字体颜色字体大小 修改input记住账号密码后的默认背景色
壹 ❀ 引 本来这个阶段的项目页面都是给实习生妹子做的,我只用写写功能接接数据,但这两天妹子要忙翻译,这个工作阶段也快结束了导致有点慌,只能自己把剩余的几个小页面给写了. 那么做页面的过程中,UI也 ...
- Git设置记住账号密码
Git设置记住账号密码 添加如下配置 [credential] helper = store
- jquery记住密码,记住账号,自动登录
1.引入jquery库 2.引入jquery.cookie.js库 3.引入操作js jsp如下: $(document).ready(function() { //输入框获得焦点-失去焦点 $(&q ...
- cocos2d JS 本地缓存存储登陆记住账号密码->相当于C++中的UserDefault
在cocos-js 3.0以上的版本中,当我们用到本地存储的时候,发现以前用到的UserDefault在JS中并没有导出,而是换成了LocalStorage. 在LocalStorage.h文件中我们 ...
随机推荐
- 1002 A + B Problem II [ACM刷题]
这一段时间一直都在刷OJ,这里建一个博客合集,用以记录和分享算法学习的进程. github传送门:https://github.com/haoyuanliu/Online_Judge/tree/mas ...
- 对于数组(字符串)slice方法的总结
数组(字符串)使用slice方法的目的就是截取目标数组(字符串),通俗的来讲就是截取想要的.网上有很多slice方法的实例加以说明,在此主要是从特殊到一般对此方法进行了总结. 先说总结的方法,再看下面 ...
- DataGridView的DataGridViewComboBoxColumn列点击一次,自动处于编辑状态
本文转载:http://www.cnblogs.com/Johnny_Z/archive/2012/02/12/2348235.html Winform中的DataGridView数据绑定控件有时会用 ...
- HDU-3473Minimum Sum
Problem Description You are given N positive integers, denoted as x0, x1 ... xN-1. Then give you som ...
- Android Matrix详解
Matrix的数学原理 平移变换 旋转变换 缩放变换 错切变换 对称变换 代码验证 Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.An ...
- Eclipse中使用git把项目导入到osc@git中
方便Eclipse用户使用Git把项目导入到osc@git中进行管理. Eclipse Git osc@git 一.原有项目: 项目名为TestGit 二.在osc@git上面创建一个新项目库. 填 ...
- Shell 获取当前时间
#! /bin/bash time=`date '+%Y-%m-%d %H:%M:%S'` # echo $time sql='SELECT `username`, `password` FROM ` ...
- C#解leetcode 53.Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- 获取Html中所有img的src
/// <summary> /// 获取所有Img中的Src /// </summary> /// <param name="htmlText"> ...
- 【转】 分析iOS Crash文件:符号化iOS Crash文件的3种方法
当你的应用提交到AppStore或者各个渠道之后,请问你多久会拿到crash文件?你如何分析crash文件的呢? 上传crash文件 你的应用应当有模块能够在应用程序crash的时候上传crash信息 ...