使用actionerror做失败登录验证

一. 登录页面中放置如下代码:

<h4>员工登录</h4>
<div style="color:red">
<s:actionerror/>
</div>

如果登录出现异常,就会将你设置的异常信息反馈出来.

二. 这个<s:actionerror/>标签需要jsp的标签库支持,代码如下:

 <%@ taglib uri="/struts-tags" prefix="s" %>

三. struts-tags标签库使用struts的filter进行过滤,需要在web.xml中过滤.jsp文件

代码如下:

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

最后actionerror需要在验证登录的时候,接收抛出的异常

如果抛出的是UnknownAccountException,

就添加一个actionerror,代码如下:

this.addActionError("用户名错误!");

如果抛出的是IncorrectCredentialsException,

就添加一个actionerror,代码如下:

this.addActionError("密码错误!");

相关代码使用shiro框架进行验证,代码如下:

    @Action("userAction_login")
    public String login() throws Exception {
        String  realCheckcode = (String) ServletActionContext.getRequest().getSession().getAttribute("key");
        if(StringUtils.isNotBlank(realCheckcode)){
            if(realCheckcode.equals(checkcode)){
                //在shiro框架基础开始认证
                //获取subject对象  认证状态:未认证
                Subject subject = SecurityUtils.getSubject();
                if(subject.isAuthenticated()){
                    return "index";
                }else{
                    //认证令牌(用户在登陆页面中输入)
                    AuthenticationToken token = new UsernamePasswordToken(model.getUsername(), Md5Util.encode(model.getPassword()));
                    //认证-登陆
                    try {
                        subject.login(token);
                        //跳转首页
                        //从subject中获取主角对象
                        User user = (User) subject.getPrincipal();
                        ServletActionContext.getRequest().getSession().setAttribute("loginUser", user);
                        return "index";
                    } catch (Exception e) {
                        if(e instanceof UnknownAccountException){
                            //账户错误
                            this.addActionError("用户名错误!");  //在登陆页面中获取错误信息。 通过strut2标签获取 <s:actionerror>  问题
                        }
                        if(e instanceof IncorrectCredentialsException){
                            //密码错误
                            this.addActionError("密码错误!");  //在登陆页面中获取错误信息。 通过strut2标签获取 <s:actionerror>  问题
                        }
                        e.printStackTrace();
                    }
                }
            }
        }   
        return "login";
    }


原文地址:https://www.cnblogs.com/qingyundian/p/9260288.html