• springMVC自定义注解实现用户行为验证


    最近在进行项目开发的时候需要对接口做Session验证

    1、自定义一个注解@AuthCheckAnnotation

    @Documented
    @Target(ElementType.METHOD)
    @Inherited
    @Retention(RetentionPolicy.RUNTIME)
    public @interface AuthCheckAnnotation {
        boolean check() default false;
    }

    2、定义一个相应的拦截器,在springMVC配置文件中进行配置

      拦截器:

      spring为我们提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器,继承此类,可以非常方便的实现自己的拦截器。可以根据我们的需要重写preHandlepostHandle、afterCompletio方法。

      分别实现预处理、后处理(调用了Service并返回ModelAndView,但未进行页面渲染)、返回处理(已经渲染了页面)
        在preHandle中,可以进行编码、安全控制等处理;
        在postHandle中,有机会修改ModelAndView;
        在afterCompletion中,可以根据ex是否为null判断是否发生了异常,进行日志记录。

    public class AuthCheckInteceptor extends HandlerInterceptorAdapter {
        @Autowired
        UserInfoService userInfoService ;
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            
            HandlerMethod methodHandler=(HandlerMethod) handler;
            AuthCheckAnnotation auth=methodHandler.getMethodAnnotation(AuthCheckAnnotation.class);
         //如果方法中添加了@AuthCheckAnnotation 这里的auth不为null
         //如果@AuthCheckAnnotation(check=false) 这里的auth为false,即不用进行拦截验证,@AuthCheckAnnotation默认为前面定义的true  
    if(auth!=null&&!auth.check()){ return true; } UserInfo user=(UserInfo)request.getSession().getAttribute(Constants.SESSION_USER); try { userInfoService.login(request, user); return true; } catch (Exception e) { request.getRequestDispatcher("login.do").forward(request, response); return false; } } }

      在springMVC.xml文件中添加拦截器

        <mvc:interceptors>
                <mvc:interceptor>
                <mvc:mapping path="/*.do"  />
                <bean  class="com.party.common.interceptor.AuthCheckInteceptor"/>        
            </mvc:interceptor>
        </mvc:interceptors>

    3、在springMVC controller中使用实例

        @AuthCheckAnnotation(check=true)
        @RequestMapping("doLogin")
        @ResponseBody
        public Object doLogin(HttpServletRequest request,HttpServletResponse response){
            .......
            return RetMessage.toJson(responseBody);
        }
  • 相关阅读:
    ssh链接服务器并且拷贝文件
    php读取文件内容
    appendchild的两个正确用法以及ajax
    创业点滴
    随笔——支持IE8的一个ajax的标准写法。
    添加评论,查看评论等——在线留言板4
    删除留言和更新留言——在线留言板3
    git常用命令
    浏览器版本控制
    洛谷 P2296 【寻找道路】
  • 原文地址:https://www.cnblogs.com/parryyang/p/5413618.html
Copyright © 2020-2023  润新知