/** * <p>绑定当前登录的用户</p> * <p>不同于@ModelAttribute</p> * * @author Zhang Kaitao */ @Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface CurrentUser { /** * 当前用户在request中的名字 * * @return */ String value() default Constants.CURRENT_USER; }
public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver { public CurrentUserMethodArgumentResolver() { } @Override public boolean supportsParameter(MethodParameter parameter) { if (parameter.hasParameterAnnotation(CurrentUser.class)) { return true; } return false; } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { CurrentUser currentUserAnnotation = parameter.getParameterAnnotation(CurrentUser.class); return webRequest.getAttribute(currentUserAnnotation.value(), NativeWebRequest.SCOPE_REQUEST); } }
@RequestMapping("/") public String index(@CurrentUser User loginUser, Model model) { Set<String> permissions = userService.findPermissions(loginUser.getUsername()); List<Resource> menus = resourceService.findMenus(permissions); model.addAttribute("menus", menus); return "index"; }
来源于http://jinnianshilongnian.iteye.com/整理的代码