基于struts2的记住账号密码的登录设计

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

  一个简单的基于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     }

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

 

 

 

 

 

 

 

相关文章
|
存储 安全 Java
二.SpringSecurity基础-简单登录实现
SpringSecurity基础-简单登录实现
|
存储 安全 Java
SpringSecurity基础-简单登录实现
1.SpringSecurity介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
98 0
|
Java 数据安全/隐私保护 容器
【JavaWeb】案例:用户登录、用户自动登录
本期主要介绍案例:用户登录、用户自动登录
317 0
【JavaWeb】案例:用户登录、用户自动登录
SSM如何整合Shiro实现权限登陆案例
SSM如何整合Shiro实现权限登陆案例
73 0
|
PHP
【laravel项目】@2 账号密码登录验证(2)
【laravel项目】@2 账号密码登录验证
72 0
【laravel项目】@2 账号密码登录验证(2)
|
PHP
【laravel项目】@2 账号密码登录验证(1)
【laravel项目】@2 账号密码登录验证
80 0
【laravel项目】@2 账号密码登录验证(1)
|
数据库 数据安全/隐私保护
SpringMVC实现简单的用户管理系统——用户登录注册、修改密码、注销功能
SpringMVC实现简单的用户管理系统——用户登录注册、修改密码、注销功能
SpringMVC实现简单的用户管理系统——用户登录注册、修改密码、注销功能
|
缓存 安全 数据库
shiro登录认证过程
shiro登录认证过程
shiro登录认证过程
|
安全 前端开发 JavaScript
SpringSecurity实现自定义登录界面
前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用自定义的登录界面,本文我们就来介绍下如何实现该操作。 注意:本文是在入门案例代码的基础上演示的!
SpringSecurity实现自定义登录界面
|
缓存 JSON 前端开发
SpringSecurity 表单登录
SpringSecurity 表单登录
211 0