文档章节

springmvc 下使用自定义注解获取登录信息

 卢铭亮
发布于 2017/02/14 14:01
字数 342
阅读 25
收藏 1

使用原因

大家的项目中在controller层是怎样获取登录用户的信息呢?

User loginUser=LoginUtil.getLoginUser();

我想有些同学是通过这样获得的,如果这样实现的话, 
恭喜你,你的Controller层已经丧失了单元测试的能力。

因为执行这个controller所需要的参数并没有完全通过参数列表来获得,而依赖于全局环境(web环境) 
这样做使得springmvc为环境解耦所设计的整个架构变得毫无意义。

实现

那怎么样写才算是高大上呢?先贴出最后效果

@RequestMapping(...)
public 返回值 方法名(@logined User user){
}

相信大家一眼就能看出他的优点。下面说一下如何实现

自定义注解 @logined

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Logined {
}

实现HandlerMethodArgumentResolver接口

public class LoginedArgumentResolver implements HandlerMethodArgumentResolver{

/**
 * 检查解析器是否支持解析该参数
 */
@Override
public boolean supportsParameter(MethodParameter parameter) {
    if(
            //如果该参数注解有@Logined
            parameter.getParameterAnnotation(Logined.class)!=null&&
            //如果该参数的类型为User
            parameter.getParameterType()==User.class
            ){
        //支持解析该参数
        return true;
    }
    return false;
}

@Override
public Object resolveArgument(MethodParameter parameter,
        ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
        WebDataBinderFactory binderFactory) throws Exception {
        HttpServletRequest request= (HttpServletRequest) webRequest.getNativeRequest();
    //这里暂时把User对象放在session中
        User user=(User)request.getSession().getAttribute("loginUser");
        return user;
    }
}

在springmvc的配置文件中配置

<mvc:annotation-driven>
    <mvc:argument-resolvers>
        <bean class="org.apollo.springmvc.argResolver.LoginedArgumentResolver"></bean>
    </mvc:argument-resolvers>
</mvc:annotation-driven>

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 2
码字总数 342
作品 0
西城
《Spring Boot极简教程》第16章 Spring Boot安全集成Spring Security

第16章 Spring Boot安全集成Spring Security 开发Web应用,对页面的安全控制通常是必须的。比如:对于没有访问权限的用户需要转到登录表单页面。要实现访问控制的方法多种多样,可以通过Aop...

程序员诗人
2017/04/17
0
0
springboot + shiro 权限注解、请求乱码解决、统一异常处理

springboot + shiro 权限注解、请求乱码解决、统一异常处理 前篇 后台权限管理系统 相关: spring boot + mybatis + layui + shiro后台权限管理系统 springboot + shiro之登录人数限制、登录...

wyait
06/06
0
0
SpringMVC中的统一异常处理-自定义异常

https://www.cnblogs.com/shanheyongmu/p/5872442.html 我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、...

wangwei2134
08/20
0
0
Spring Security实现RBAC权限管理

Spring Security实现RBAC权限管理 一简介 在企业应用中,认证和授权是非常重要的一部分内容,业界最出名的两个框架就是大名鼎鼎的 Shiro和Spring Security。由于Spring Boot非常的流行,选择...

小忽悠
06/21
0
0
spring梳理(二) 基于注解的方式注册bean

我们知道,如果想要将bean交由spring容器管理,就需要首先将bean注册在spring容器中,而bean可以通过xml或者注解的方式进行注册,基于xml的配置一般是通过、等xml标签进行配置,然后由sprin...

wyn_lin
05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

DES/3DES(TripleDES)加密、解密测试数据

以下结果经 PHP+openssl及VB.NET验证,ECB模式。 PHP 7.0.10 (cli) (built: Aug 18 2016 09:48:53) ( ZTS ) OpenSSL Library Version: OpenSSL 1.0.1t 3 May 2016 VB.net 2003 ****** DES(S......

SamXIAO
32分钟前
1
2
Java11的新特性

Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 序 本文主要讲述一下Java11的新特性 版本号 java...

go4it
33分钟前
3
0
Maven常用命令及相关笔记

Maven常用命令 dos指令 4. 编译源代码: mvn compile 6. 运行测试: mvn test 8. 打包: mvn package 9. 在本地Repository中安装jar: mvn install 10. 清除产生的项目: mvn clean 4. 运行项...

颖伙虫
39分钟前
1
0
swagger2.2.2 与 spring cloud feign冲突 导致服务请求报空

swagger2.2.2 与 spring cloud feign冲突 Java代码 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.choosefine.web.console.ar......

泉天下
42分钟前
1
0
设计模式之 明确责任 观察者模式 状态模式 责任链模式

观察者模式是任务分发的一种模式。 如果认为我们设计的系统的各个模块(或子系统)的最终目的是完成共同任务,那么这个任务如何分配到多个模块的就是我们遇到的第一个问题。简单设计场合我们...

backbye
47分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部