SpringMvc自定义注解获取用户登陆信息

一.先声明注解类

package com.wfy.controller;

import java.lang.annotation.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 *
 * @author 王飞焱
 * Date: 11:29
 * Time: 2018/8/10
 */
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CurrUsers {
    String value() default "users";
}

1.@Target指定注解的使用范围,这里我们指定ElementType为PARAMETER,也就是参数即可。

2.@Retention作用是定义该注解能保留多久,一共有三种策略,这里我们指定为RUNTIME,也就是运行时

3.创建@CurrUser的解析器类,该类实现spring的HandleMethodArgumentResolver

二.实现HandlerMethodArgumentResolver接口  

利用自定义注解类中的default(key)值 获取session作用域中的value值

package com.wfy.util;
import com.wfy.controller.CurrUsers;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

/**
 * 实现@currUser的参数解析器
 * Created by caidapao on 2018/3/30
 * Time 22:02
 */
public class CurrUserMethodArgumentResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter methodParameter) {
        if(methodParameter.hasParameterAnnotation(CurrUsers.class)){
            return true;
        }
        return false;
    }

    @Override
    public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
        CurrUsers currentUserAnnotation = methodParameter.getParameterAnnotation(CurrUsers.class);
        return nativeWebRequest.getAttribute(currentUserAnnotation.value(), NativeWebRequest.SCOPE_SESSION);
    }
}

1.supportsParameter方法,判断什么时候要执行下面的resolveArgument方法。这里我们判断当一个方法的参数含有@CurrUser的时候返回true。

2.resolveArgument方法,在这里我们直接把放在session中的用户信息放回去即可。

三.配置SpringMVC.xml

    <!-- 交给spring统一管理-->
    <mvc:annotation-driven>
        <mvc:argument-resolvers>
            <bean class="com.wfy.util.CurrUserMethodArgumentResolver"/>
        </mvc:argument-resolvers>
    </mvc:annotation-driven>

四.测试是否配置成功

    @RequestMapping(value = "/insertUser")
    @ResponseBody
    public ResultMessage insertUserinfo(HttpServletRequest request, UsersInfo users) {
        ResultMessage message = usersInfoService.insertUserinfo(users);
        request.getSession().setAttribute("users",users);
    	return message;
    }


    @RequestMapping(value = "/testUsers")
    @ResponseBody
    public String testUsers(@CurrUsers UsersInfo currUsersUtil) {
        log.info("进入测试方法");
        log.info("用户名"+currUsersUtil.getUserName());
        log.info("密码"+currUsersUtil.getUserPassword());
        return currUsersUtil.getUserName();
    }

1.第一个方法添加用户并保存用户信息到session

2.第二个方法用自定义注解获取session里的信息

注:@CurrUsers 这个就是自定义的注解

        UsersInfo currUsersUtil 是你要映射的实体类,保存在session里的数据映射到你声明的实体

测试效果

先调用 insertUser 保存session

再调用testUsers 用注解获取

打印用户信息如下

猜你喜欢

转载自blog.csdn.net/m0_37974328/article/details/81561145