文档章节

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

 卢铭亮
发布于 2017/02/14 14:01
字数 342
阅读 29
收藏 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
Spring Security实现RBAC权限管理

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

小忽悠
06/21
0
0
SpringMVC中的统一异常处理-自定义异常

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

wangwei2134
08/20
0
0
使用Spring Validation 完成后端数据校验

转载并修改于:使用spring validation完成数据后端校验 前言 Web开发中JS校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器...

Jitwxs
10/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

安卓代码混淆

Proguard是安卓提供的方便开发者对代码和apk进行保护和精简的工具,可在SDK/tools文件夹下找到。 proguard的作用 : 1,代码混淆 2,精简代码,删掉没有用到的代码,减小apk的体积。 使用场景...

whoisliang
7分钟前
0
0
配置Tomcat虚拟主机

12月13日任务 16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机 16.8 Tomcat日志 配置tomcat监听80端口 默认tomcat监听的是8080端口,如果想直接输入ip就访问到网页,就需要进行...

robertt15
13分钟前
1
0
emqtt Qos 0, 1, 2 图解

SimonAt
14分钟前
0
0
基于vue2定义自己的图表echart组件

先安装echarts cnpm i echarts -S,然后定义父组件 <template> <div> <echarts :option="echartOpion"></echarts> </div></template><script> import echarts from './e......

莫沫达
20分钟前
1
0
详解CSS的Flex布局

本文由云+社区发表 Flex是Flexible Box 的缩写,意为"弹性布局",是CSS3的一种布局模式。通过Flex布局,可以很优雅地解决很多CSS布局的问题。下面会分别介绍容器的6个属性和项目的6个属性。每...

腾讯云加社区
32分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部