springMvc自定义注解验证

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

相关推荐