SpringMVC攔截器實現數據驗證 v0.1版(欣茂Java學院)

1、SpringMVC文件配置:

<mvc:interceptors>
       <!-- 針對所有的html路徑進行攔截 -->
       <mvc:interceptor>
           <mvc:mapping path="/pages/**/*.html"/>
           <bean class="cn.xmkeshe.util.validation.ValidatorInterceptor"/>
       </mvc:interceptor>
   </mvc:interceptors>
<!-- 配置資源文件 -->
   <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
       <property name="basenames">
           <array>
               <value>Validators</value>
           </array>
       </property>
   </bean>

2、定義資源文件

AdminLoginAction.login=aid:string|password:string

3、定義攔截器

package cn.xmkeshe.util.validation;
import org.springframework.context.MessageSource;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
public class ValidatorInterceptor implements HandlerInterceptor {
    @Resource
    private MessageSource messageSource;
    @Override
    public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
        // 1、取得對象
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        // 2、取得對象方法
        System.out.println(handlerMethod.getMethod().getName());
        // 3、取得對象名稱
        System.out.println(handlerMethod.getBean().getClass().getSimpleName());
        // 4、拼湊key
        String key = handlerMethod.getBean().getClass().getSimpleName() + "." + handlerMethod.getMethod().getName();
        // 5、通過key取得value
        System.out.println("key=" + key);
        System.out.println("key=" + this.messageSource.getMessage(key, null, Locale.getDefault()));
        // 6、判斷規則是否存在
        String validatorValue = this.messageSource.getMessage(key, null, Locale.getDefault());
        if (validatorValue != null) {
            System.out.println(new Validator().validation(request, validatorValue)+"****");
            if(new Validator().validation(request, validatorValue)) {
                return true;
            }else{
                return false;
            }
        } else {
            return false;
        }
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}

4、數據驗證類

package cn.xmkeshe.util.validation;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class Validator {
    public boolean validation(HttpServletRequest request, String rule) throws ServletException, IOException {
        boolean flag = true;
        String result[] = rule.split("\\|");
        for (int x = 0; x < result.length; x++) {
            String temp[] = result[x].split(":");
            // 取得內容
            String value = request.getParameter(temp[0]);
            if(value != null){
                if("string".equals(temp[1])){
                    flag = this.isEmpty(value);
                    if(flag == false){
                       return false;
                    }
                }else if("date".equals(temp[1])){
                    flag = this.isDate(value);
                    if(flag == false){
                        return false;
                    }
                }else if("number".equals(temp[1])){
                    flag = this.isNumber(value);
                    if(flag == false){
                        return false;
                    }
                }
            }
        }
        return flag;
    }
    /**
     * <li>驗證字符串是否爲空1</li>
     *
     * @param str 要執行驗證的字符串
     * @return 驗證成功返回true,驗證失敗返回false
     */
    public boolean isEmpty(String str) {
        if (str == null || "".equals(str)) {
            return false;
        }
        return true;
    }
    /**
     * <li>數字驗證</li>
     *
     * @param str
     * @return
     */
    public boolean isNumber(String str) {
        if (this.isEmpty(str)) {
            return str.matches("\\d+(\\.\\d+?)");
        }
        return false;
    }
    /**
     * <li>日期驗證</li>
     *
     * @param str
     * @return
     */
    public boolean isDate(String str) {
        if (this.isEmpty(str)) {
            if (str.matches("\\d{4}-\\d{2}-\\d{2}")) {
                return true;
            } else {
                return str.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}");
            }
        }
        return false;
    }
}

5、js提示信息定義

layui.use(['layer', 'form', 'jquery'], function () {
    var layer = layui.layer,
        form = layui.form,
        $ = layui.jquery;
    form.on('submit(formDemo)', function (obj) {
        $.ajax({
            url: '/hospital/pages/AdminLoginAction/login.html',
            type: 'POST',
            data: $('.layui-form').serialize(),
            success: function (data) {
                if (data == "success") {
                    layer.msg('登錄成功!', {
                        time: 2000, icon: 1, end: function () {
                            window.location.href='/hospital/back/admin/index.jsp';
                        }
                    })
                } else if(data == "failure"){
                    layer.msg('登錄失敗!',{time:2000,icon:2})
                }else{
                    layer.msg("數據不能爲空!",{time:2000,icon:2})
                }
            }
        })
    })
})

6、控制層代碼定義

@Controller
@RequestMapping("/pages/AdminLoginAction/*")
public class AdminLoginAction extends DefaultAction {
    @Resource
    private IAdminService adminService;

    @RequestMapping("login")
    public void login(Admin admin, HttpServletResponse response, HttpServletRequest request) {
        try {
            Admin vo = this.adminService.login(admin.getAid(),admin.getPassword());
           if(vo != null){
               super.print(response, "success");
           }else{
               super.print(response, "failure");
           }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

欣茂Java學院更多課程:點擊學習
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章