文档章节

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

 卢铭亮
发布于 2017/02/14 14:01
字数 342
阅读 12
收藏 1
点赞 0
评论 0

使用原因

大家的项目中在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
西城
springboot + shiro 权限注解、请求乱码解决、统一异常处理

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

wyait ⋅ 06/06 ⋅ 0

spring梳理(二) 基于注解的方式注册bean

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

wyn_lin ⋅ 05/25 ⋅ 0

【补充】Hibernate validator使用和自定义validator及整合Spring MVC

Hibernate validator使用 导入validation-api-xxx.jar 以及 hibernate-validator-xxx.Final.jar 需要检查的java bean Entity.java 值校验的测试类 输出结果 这里有一个国际化的key值,国际化文...

jason_wu_2 ⋅ 2016/12/27 ⋅ 0

SpringBoot集成Spring Security(1)——入门程序

因为项目需要,第一次接触Spring Security,早就听闻Spring Security强大但上手困难,今天学习了一天,翻遍了全网资料,才仅仅出入门道,特整理这篇文章来让后来者少踩一点坑(本文附带实例程...

yuanlaijike ⋅ 05/09 ⋅ 0

让Spring Security 来保护你的Spring Boot项目吧

参考资料: 书籍:Spring实战(第4版) 第9章和第14章 Spring Security 参考手册 初识 Spring Security 程序猿DD的Spring Security学习笔记 Spring Security 简介 Spring Security是一个能够为...

潇潇漓燃 ⋅ 05/19 ⋅ 0

Shiro权限控制框架入门2:如何将Shiro非入侵地整合到SpringMVC等Web项目中

前言:我在上一篇文章(PS:https://www.zifangsky.cn/770.html)中介绍了shiro框架的一些基本概念以及自定义Realm可以实现的自定义授权和认证的目的。在这一篇文章中我将介绍如何将Shiro与S...

pangfc ⋅ 2017/01/06 ⋅ 0

SpringMVC知识梳理(一)

什么是SpringMVC SpringMVC其实就是spring框架的一个模块,SpringMVC和spring之间可以无缝整合,SpringMVC也是一个非常优秀的基于MVC的web框架,什么是MVC这里就不多说了,下面来了解一下spr...

iHuawen ⋅ 2017/12/28 ⋅ 0

【spring boot 系列】spring security 实践 + 源码分析

前言 本文将从示例、原理、应用3个方面介绍 spring data jpa。 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明...

java高级架构牛人 ⋅ 06/06 ⋅ 0

抽离。/FzqBlog

交流社区 使用spring + springmvc + mybatis + quartz + freemarker 使用spring aop + 自定义注解实现细粒度到按钮级别的轻量级权限控制 使用quartz定时统计数据采用echart展示 集成极验验证...

抽离。 ⋅ 2017/03/06 ⋅ 0

SpringBoot集成Spring Security(4)——自定义表单登录

通过前面三篇文章,应该大致了解了Spring Security的流程。你应该发现了,真正的登录请求是由Spring Security帮我们处理的,那么我们如何实现自定义表单登录呢,比如添加一个验证码… 源码地...

yuanlaijike ⋅ 05/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部