欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springMvc自定义注解验证 博客分类: springmvc springMvc 

程序员文章站 2024-03-16 14:55:52
...

 

springMvc自定义注解验证

 

注解就是一个标记,打了注解就有特殊的标志,如果一个方法上打了这个注解,就可以配合拦截器,拦截器拦截到符合拦截

规则的请求,就拦截成功,然后在拦截器里看这个方法有没有加这个注解即可,有的话看注解里对应的标记值时候符合要求

 

 

package com.demo.web.auth;

 

import java.lang.annotation.Documented;

import java.lang.annotation.ElementType;

import java.lang.annotation.Inherited;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

 

@Documented

@Inherited

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)/////最高优先级@Order(Ordered.HIGHEST_PRECEDENCE),还可以设置优先级

public @interface AuthPassport {

    boolean validate() default true;

}

 

 

 

 

 

 

 

package com.demo.web.auth;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.method.HandlerMethod;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

 

public class AuthInterceptor extends HandlerInterceptorAdapter {

    

    @Override

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        

        if(handler.getClass().isAssignableFrom(HandlerMethod.class)){

            AuthPassport authPassport = ((HandlerMethod) handler).getMethodAnnotation(AuthPassport.class);

            

            //没有声明需要权限,或者声明不验证权限(检验拦截器里面是不是有这个注解

                if(authPassport == null || authPassport.validate() == false)//用方法调用的方式取值

                return true;

            else{                

                //在这里实现自己的权限验证逻辑(可以直接把权限插件的(shrio的验证代码引入,如果只是登陆就不必,直接校验登录名,密码即可))

                if(false)//如果验证成功返回true(这里直接写false来模拟验证失败的处理)

                    return true;

                else//如果验证失败

                {

                    //返回到登录界面

                    response.sendRedirect("account/login");

                    return false;

                }       

            }

        }

        else

            return true;   

     }

}

 

 

 

 

 

 

<mvc:interceptors>  

    <!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 --> 

    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />  

    <!-- 如果不定义 mvc:mapping path 将拦截所有的URL请求 -->

    <bean class="com.demo.web.auth.AuthInterceptor"></bean>

////需要配置map时配置,另一种配置方式,精确拦截

   // <mvc:interceptor>

    //        <mvc:mapping path="/*.do"  />

     //       <bean  class="com.party.common.interceptor.AuthCheckInteceptor"/>        

       // </mvc:interceptor>

</mvc:interceptors>

 

 

 

 

@AuthPassport(validate='false')//用这种K-Y方式改变注解中的值

@RequestMapping(value={"/index","/hello"})

public ModelAndView index(){

    

    ModelAndView modelAndView = new ModelAndView();  

    modelAndView.addObject("message", "Hello World!");  

    modelAndView.setViewName("index");  

    return modelAndView;

}

 

 

 

 

 

 

 

 

 

 

参考:

http://www.cnblogs.com/liukemng/p/3751338.html

 

 

http://www.cnblogs.com/parryyang/p/5413618.html

 

 

 

 

 

相关标签: springMvc