SpringBoot笔记-通过实现HandlerMethodArgumentResolver接口,给springMvc的Controller的方法注入自定义参数

实现HandlerMethodArgumentResolver接口

package com.wy2.cloud.microservice.user.configuration;

import com.wy2.cloud.pojo.security.User;
import org.springframework.core.MethodParameter;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.bind.annotation.AuthenticationPrincipal;
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;

import javax.servlet.http.HttpServletRequest;

/**
 * 系统名称 xx平台
 * 工程名称 wy2-cloud
 * 创建时间 2017/7/14 18:23
 *
 * @author admin
 * @since 1.8
 */
public class UserMethodArgumentResolver implements HandlerMethodArgumentResolver {
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        if(parameter.getParameterType() != null
                && parameter.getParameterType().equals(User.class)){
            return true;
        }else {
            return false;
        }

    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        Authentication authentication = SecurityContextHolder.getContext()
                .getAuthentication();
        if (authentication == null) {
            return null;
        }
        Object principal = authentication.getPrincipal();
        if (principal != null
                && !parameter.getParameterType().isAssignableFrom(User.class)) {
            User userDetails = (User)principal;
            return userDetails;
        }
        return principal;
    }
}

把自定义参数处理类配置到spring mvc的 WebMvcConfigurerAdapter

package com.wy2.cloud.microservice.user.configuration;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import java.util.List;

/**
 * 系统名称 xx平台
 * 工程名称 wy2-cloud
 * 创建时间 2017/7/14 18:01
 *
 * @author admin
 * @since 1.8
 */
@Configuration
public class WebParameterConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(new UserMethodArgumentResolver());
    }
}

使用样例

package com.wy2.cloud.microservice.user.controller.manage;

import com.wy2.cloud.pojo.security.User;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.security.Principal;
import java.util.Collection;

/**
 * 系统名称 xx平台
 * 工程名称 wy2-cloud
 * 创建时间 2017/6/28 14:44
 *
 * @author admin
 * @since 1.8
 */
@RequestMapping("/"+IndexController.Mapping_Url)
@Controller
public class IndexController {
    public static final String Mapping_Url="manage";

    @RequestMapping(value = {"/",""})
    public String index(Model model, Authentication authentication,User user){
        model.addAttribute("title","userweb");




        //输出登录提示信息
        //System.out.println("管理员 " + user.getUsername() + " 进入");
        return Mapping_Url+"/index";
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值