zoukankan      html  css  js  c++  java
  • 使用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";
        }


  • 相关阅读:
    创建Variant数组
    ASP与存储过程(Stored Procedures)
    FileSystemObject对象成员概要
    Kotlin 朱涛9 委托 代理 懒加载 Delegate
    Kotlin 朱涛 思维4 空安全思维 平台类型 非空断言
    Kotlin 朱涛7 高阶函数 函数类型 Lambda SAM
    Kotlin 朱涛16 协程 生命周期 Job 结构化并发
    Proxy 代理模式 动态代理 cglib MD
    RxJava 设计理念 观察者模式 Observable lambdas MD
    动态图片 Movie androidgifdrawable GifView
  • 原文地址:https://www.cnblogs.com/qingyundian/p/9260288.html
Copyright © 2011-2022 走看看