一个简单的基于struts2的登录功能,实现的额外功能有记住账号密码,登录错误提示。这里写上我在设计时的思路流程,希望大家能给点建设性的意见,帮助我改善设计。

  登录功能的制作,首先将jsp界面搭建出来,界面搭建出来之后,我首先想的是如何用cookie来实现记住账号密码,这里我选择的是在class中实现这个cookie。

jsp页面中的checkbox标签作为一个标记参数来判断用户是否选择了记住账号和密码,在登录提交之后,伴随着登录的账号、密码、激活码一起传递到action中,checkbox选中,则传递true,不选中,则不传递。

1         if(checkbox){
2 Cookie namecookie = new Cookie("loginName",loginName);//新建cookie对象
3 Cookie passwordcookie = new Cookie("password",password);
4 namecookie.setMaxAge(60*60*24*365);//设置cookie对象的有效时间
5 passwordcookie.setMaxAge(60*60*24*365);
6 response.addCookie(namecookie);
7 response.addCookie(passwordcookie);
8 }

  记住账号密码的cookie实现后,我有2个操作要做,一个是判断登录账号是否存在,是否允许登录,还有一个是验证码是否正确。在这里我设计的是先判断验证码的正确性。因为验证码是为了防止特定程序以暴力破解的方式不断的进行登录尝试。说白了就是用来区分人和电脑的,先判断验证码,验证码错误,则不进行账户匹配的操作,可以减少程序对数据库的访问,节省资源。验证码正确,再进行账号匹配操作。

1 String code = (String) ActionContext.getContext().getSession().get("code");//得到系统生成并存储在session中的验证码
2 if(code!=null&&code.equalsIgnoreCase(yzm)){
3
4 admin = adminBiz.loginByNamePassword(loginName,password);
5 if(admin!=null){
6 ActionContext.getContext().getSession().put("manager",admin);
7 return "loginok";//跳转到登录操作页面
8 }
9 }

  这样一个简单的登录就实现了,但还是有很多问题没有解决,比如我创建了cookie,但没有读取,那记住的账号密码从哪里来显示到登录页面上呢?

我想设计的是在action中用同一个方法来实现读取cookie。也就是我登录提交和显示登录jsp页面访问的都是同一个action的同一个方法。

那我怎么区分它是第一次访问,要显示登录页面而不是要它去判断登录提交呢?

  因为我的登录提交是用form表单来实现的,所以我账号密码就算不输值,form表单中的input也会提交""字符给action,但如果我不是通过form表单来跳转,则不会提交""给action。因此,我就通过判断账号和密码是否为空来区分是第一次访问要显示登录页面还是判断登录情况,而且我的验证码是在登录页面中显示的,我如果不是通过登录页面去访问这个action,则session中存储的验证码也为空(但不能排除你是重复刷新登录页面的情况,所以不用session中的验证码)。既然已经能区分第一次访问和提交访问,则当它是第一次访问的时候,判断是否存在cookie,并读取传递到登录页面显示。

 1 if(loginName==null&&password==null){
2 loginName = "";
3 password = "";
4 Cookie[] cookies = request.getCookies();
5 if(cookies!=null)
6 {
7 checkbox = true;//标记checkbox,传递到登录页面,使checkbox默认勾选
8 for (int i = 0; i < cookies.length; i++)
9 {
10 Cookie c = cookies[i];
11 if(c.getName().equalsIgnoreCase("loginName"))
12 {
13 loginName = c.getValue();
14 }
15 else if(c.getName().equalsIgnoreCase("password"))
16 {
17 password = c.getValue();
18 }
19 }
20 }
21 return "login";//跳转到登录页面

22 }

  这样登录的记住和读取账号密码就都能实现了。但还缺少登录错误提示,我在action中设计了变量warn,初始值为"",在直接访问action时,不对warn做处理,

若为form表单提交访问,则根据不同的情况赋予warn不同的提示语。

最后,附上完整的action_login方法

 1  1 private String warn;
2 2 private boolean checkbox;
3 3 private String loginName;
4 4 private String password;
5 5 private String yzm;//验证码
6 6 private Admin admin;
7 7 public String login(){
8 8
9 9 HttpServletRequest request = ServletActionContext.getRequest();
10 10 HttpServletResponse response = ServletActionContext.getResponse();
11 11 if(checkbox){
12 12 Cookie namecookie = new Cookie("loginName",loginName);//新建cookie对象
13 13 Cookie passwordcookie = new Cookie("password",password);
14 14 namecookie.setMaxAge(60*60*24*365);//设置cookie对象的有效时间
15 15 passwordcookie.setMaxAge(60*60*24*365);
16 16 response.addCookie(namecookie);
17 17 response.addCookie(passwordcookie);
18 18 }
19 19 String code = (String) ActionContext.getContext().getSession().get("code");//得到系统生成并存储在session中的验证码
20 20 if(loginName==null&&password==null){
21 21 loginName = "";
22 22 password = "";
23 23 Cookie[] cookies = request.getCookies();
24 24 if(cookies!=null)
25 25 {
26 26 checkbox = true;//传递到登录页面,作为标签checkbox默认勾选的判断
27 27 for (int i = 0; i < cookies.length; i++)
28 28 {
29 29 Cookie c = cookies[i];
30 30 if(c.getName().equalsIgnoreCase("loginName"))
31 31 {
32 32 loginName = c.getValue();
33 33 }
34 34 else if(c.getName().equalsIgnoreCase("password"))
35 35 {
36 36 password = c.getValue();
37 37 }
38 38 }
39 39 }
40 40 return "login";//跳转到登录页面
41 41 }else if("".equals(loginName)||"".equals(password)){
42 42 warn = "用户名或密码不能为空!";
43 43 return "login";
44 44 }else if(code!=null&&code.equalsIgnoreCase(yzm)){
45 45
46 46 admin = adminBiz.loginByNamePassword(loginName,password);
47 47 if(admin!=null){
48 48 ActionContext.getContext().getSession().put("manager",admin);
49 49 return "loginok";//跳转到登录成功页面
50 50 }else{
51 51 warn = "账号或密码错误!";
52 52 return "login";
53 53 }
54 54 }else{
55 55 warn = "验证码错误!";
56 56 return "login";
57 57 }
58 58 }

  希望大家多多提意见~~一起共勉,一起提升~~~

基于struts2的记住账号密码的登录设计的更多相关文章

  1. struts2的记住账号密码的登录设计

    一个简单的基于struts2的登录功能,实现的额外功能有记住账号密码,登录错误提示.这里写上我在设计时的思路流程,希望大家能给点建设性的意见,帮助我改善设计. 登录功能的制作,首先将jsp界面搭建出来 ...

  2. C# ASP.NET MVC:使用Cookie记住账号密码

    MVC记住账号密码 使用cookie操作 前端: <div> 用户名:<input type="text" id="UserName" val ...

  3. 利用SharedPreferences完成记住账号密码的功能

    利用SharedPreferences完成记住账号密码的功能 效果图: 记住密码后,再次登录就会出现账号密码,否则没有. 分析: SharedPreferences可将数据存储到本地的配置文件中 Sh ...

  4. Linux让git记住账号密码

    Linux让git记住账号密码 ——IT唐伯虎 摘要: Linux让git记住账号密码. 1.进入根目录,指令:cd / 2.创建记录账号密码的文件,指令:touch .git-credentials ...

  5. eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?

    eclipse 中main()函数中的String[] args如何使用? 右击你的项目,选择run as中选择 run configuration,选择arguments总的program argu ...

  6. css 修改placeholder字体颜色字体大小 修改input记住账号密码后的默认背景色

     壹 ❀ 引 本来这个阶段的项目页面都是给实习生妹子做的,我只用写写功能接接数据,但这两天妹子要忙翻译,这个工作阶段也快结束了导致有点慌,只能自己把剩余的几个小页面给写了. 那么做页面的过程中,UI也 ...

  7. Git设置记住账号密码

    Git设置记住账号密码 添加如下配置 [credential] helper = store

  8. jquery记住密码,记住账号,自动登录

    1.引入jquery库 2.引入jquery.cookie.js库 3.引入操作js jsp如下: $(document).ready(function() { //输入框获得焦点-失去焦点 $(&q ...

  9. cocos2d JS 本地缓存存储登陆记住账号密码->相当于C++中的UserDefault

    在cocos-js 3.0以上的版本中,当我们用到本地存储的时候,发现以前用到的UserDefault在JS中并没有导出,而是换成了LocalStorage. 在LocalStorage.h文件中我们 ...

随机推荐

  1. VC中句柄、指针、ID之间的转换

    win32直接操作的是句柄HANDLE,每个句柄就对应windows窗口,而vc对HANDLE进行类封装,间接操作的都是HANDLE,现在句柄只是类的一个成员变量. 从句柄到指针 CWnd* pWnd ...

  2. POJ2430 Lazy Cows

    题意描述 Lazy Cows 给定一个 \(2\times b\) 的矩形,和 \(n\) 个矩形上的点. 要求你用 \(k\) 个矩形覆盖这 \(n\) 个点,使得每个点都被覆盖的前提下这些矩形的面 ...

  3. 错误解析:org.apache.catalina.LifecycleException: Protocol handler start failed

    以下是报错代码: org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catalin ...

  4. python00

    # Python* [什么是 Python 生成器?](#什么是-Python-生成器)* [什么是 Python 迭代器?](#什么是-Python-迭代器)* [list 和 tuple 有什么区 ...

  5. 如约而至,.NET 5.0 正式发布

    作者:Richard 翻译:精致码农-王亮 原文:http://dwz.win/WFz 说明:文章太长,后面关于 C# 9 语言新特性及平台新特性的部分没有翻译,这部分基本都是代码示例,请直接阅读原文 ...

  6. Mac环境MySql初始密码设置

    1. 首先 点击系统偏好设置 -> 点击MySQL, 在弹出的页面中,关闭服务.2. 进入终端命令输出: cd /usr/local/mysql/bin/ 命令,回车.3. 回车后,输入命令:s ...

  7. vs code远程开发

    VS Code如何配置远程开发 你是如何远程开发的?还在使用FTP/SFTP同步文件?那你out了,有了宇宙第一IDE:VS就不需要这么麻烦了,一起学习一下吧. 第一步,安装Remote SSH插件 ...

  8. http 结构初始化

    简要而说:accept 到连接后 根据fd 构建一个connection  由于是 http : 重新封装为http-connection:同时设置fd的读回调: 回调函数根据是否是https/htt ...

  9. pycharm 报错及解决方法

    1.报错: AttributeError: 'list' object has no attribute 'click' 原因:应是find_element_by 不是 find_elements_b ...

  10. 为什么删除的Ceph对象还能get

    前言 在很久以前在研究一套文件系统的时候,当时发现一个比较奇怪的现象,没有文件存在,磁盘容量还在增加,在研究了一段时间后,发现这里面有一种比较奇特的处理逻辑 这套文件系统在处理一个文件的时候放入的是一 ...