- 浏览: 554296 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (145)
- apache-struts (3)
- apache-shiro (4)
- apache-wicket (1)
- spring (34)
- spring-data-jpa (2)
- spring-mvc (20)
- spring-security (1)
- spring-webflow (1)
- hibernate (2)
- mongodb (1)
- ibatis (5)
- mysql (4)
- 开源组件 (18)
- java (3)
- maven (7)
- jBPM (1)
- EJB (1)
- JMS (2)
- servlet / jsp (9)
- javascript / jquery (10)
- 工作技巧 (12)
- ubuntu (6)
- bootstrap (10)
- javaee (1)
- 他山石 (7)
- jetbrick (1)
最新评论
-
yubao2008:
[size=x-small]为什么我也这样试了, 就是没有生效 ...
javax.servlet.http.HttpServletResponse 得到 status_code -
chenrl:
...
SpringMVC杂记(十五) spring-mvc controller 的切面 -
LONGTENGLONG:
你好,这样配置的,得到的集合为空,是什么原因?
apache-shiro杂记(一) 统计在线用户数目 -
xiafengfeiwu:
[flash=200,200][url]引用[/url][/f ...
apache-shiro 学习笔记 -
3108493554:
你好 ,有些问题想请教下,加下我qq310849354,你这上 ...
SpringMVC杂记(十二) 自定义Interceptor从Active Directory得到域信息
SpringMVC杂记(十七) HandlerMethodArgumentResolver接口应用example
- 博客分类:
- spring-mvc
自从spring3.1 开始就有了这个接口,可以为@RequestMapping标注的方法扩展传入的参数。
以shiro为例,扩展一个标注,@CurrentUser,只要有这个标注,就可以在shiro的安全上下文中取出适当的对象直接从参数传入,request响应函数。
最后,需要配置一下
判断哪些类型支持这个resolver,条件是参数类型为userdetails,或者long, 且带有CurrentUser注解的
以shiro为例,扩展一个标注,@CurrentUser,只要有这个标注,就可以在shiro的安全上下文中取出适当的对象直接从参数传入,request响应函数。
import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Documented @Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface CurrentUser { }
@RequestMapping(value = "/test1") public @ResponseBody String test1(@CurrentUser Long userId) { return userId.toString(); } @RequestMapping(value = "/test2") public @ResponseBody String test2(@CurrentUser UserDetails userDetails) { return userDetails.toString(); }
import java.lang.annotation.Annotation; import org.springframework.core.MethodParameter; 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 com.github.yingzhuo.mycar2.annotation.CurrentUser; import com.github.yingzhuo.mycar2.security.SecurityUtils; import com.github.yingzhuo.mycar2.security.UserDetails; public class CurrentUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { Class<?> klass = parameter.getParameterType(); if (klass.isAssignableFrom(UserDetails.class) || klass.isAssignableFrom(Long.class)) { Annotation[] as = parameter.getParameterAnnotations(); for (Annotation a : as) { if (a.annotationType() == CurrentUser.class) { return true; } } } return false; } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { if ((SecurityUtils.isAuthenticated() || SecurityUtils.isRemembered()) == false) { return null; } Class<?> klass = parameter.getParameterType(); UserDetails userDetails = SecurityUtils.getUserDetails(); if (klass.isAssignableFrom(UserDetails.class)) { return SecurityUtils.getUserDetails(); } if (klass.isAssignableFrom(Long.class)) { return userDetails != null ? userDetails.getId() : null; } return null; } }
最后,需要配置一下
<mvc:annotation-driven> <mvc:argument-resolvers> <bean class="xxx.yyy.CurrentUserHandlerMethodArgumentResolver" /> </mvc:argument-resolvers> </mvc:annotation-driven>
评论
2 楼
zxl410970953
2015-12-30
ly10265139 写道
不错,很懂,很明白
@Override
public boolean supportsParameter(MethodParameter parameter) {
Class<?> klass = parameter.getParameterType();
if (klass.isAssignableFrom(UserDetails.class) || klass.isAssignableFrom(Long.class)) {
Annotation[] as = parameter.getParameterAnnotations();
for (Annotation a : as) {
if (a.annotationType() == CurrentUser.class) {
return true;
}
}
}
return false;
}
只是不明白这一块是干嘛的?
@Override
public boolean supportsParameter(MethodParameter parameter) {
Class<?> klass = parameter.getParameterType();
if (klass.isAssignableFrom(UserDetails.class) || klass.isAssignableFrom(Long.class)) {
Annotation[] as = parameter.getParameterAnnotations();
for (Annotation a : as) {
if (a.annotationType() == CurrentUser.class) {
return true;
}
}
}
return false;
}
只是不明白这一块是干嘛的?
判断哪些类型支持这个resolver,条件是参数类型为userdetails,或者long, 且带有CurrentUser注解的
1 楼
ly10265139
2015-12-24
不错,很懂,很明白
@Override
public boolean supportsParameter(MethodParameter parameter) {
Class<?> klass = parameter.getParameterType();
if (klass.isAssignableFrom(UserDetails.class) || klass.isAssignableFrom(Long.class)) {
Annotation[] as = parameter.getParameterAnnotations();
for (Annotation a : as) {
if (a.annotationType() == CurrentUser.class) {
return true;
}
}
}
return false;
}
只是不明白这一块是干嘛的?
@Override
public boolean supportsParameter(MethodParameter parameter) {
Class<?> klass = parameter.getParameterType();
if (klass.isAssignableFrom(UserDetails.class) || klass.isAssignableFrom(Long.class)) {
Annotation[] as = parameter.getParameterAnnotations();
for (Annotation a : as) {
if (a.annotationType() == CurrentUser.class) {
return true;
}
}
}
return false;
}
只是不明白这一块是干嘛的?
发表评论
-
SpringMVC杂记(十八) ServletRequestAttributes的应用
2014-02-28 12:38 14125看了一下SpringMVC的源代码,原来SpringMVC也提 ... -
SpringWebflow杂记(一) 框架初探,与SpringMVC的集成
2013-10-23 17:18 1655今日研究了一下SpringWebFlow这个项目,作为Spri ... -
SpringMVC杂记(十六) spring-mvc 与 openid4java
2013-10-12 15:25 3805SpringMVC杂记(十六) spring-mvc 与 op ... -
SpringMVC杂记(十五) spring-mvc controller 的切面
2013-08-01 19:42 6048SpringMVC杂记(十五) spring-mvc cont ... -
SpringMVC杂记(十四) Ajax方式的JSR303认证
2013-06-13 07:29 4475自己定义一个Exception,用来表示数据绑定失败 im ... -
SpringMVC杂记(十三) 使用FreeMarker作为视图层
2013-06-09 11:55 3343实在没什么好说的,直接上配置文件好了 <bean i ... -
SpringMVC杂记(十二) 自定义Interceptor从Active Directory得到域信息
2013-06-04 14:04 3137一)最近项目中要求实现Web应用的SSO(Single Sig ... -
SpringMVC杂记(十一) 使用Excel视图
2013-04-06 16:06 6563SpringMVC杂记(十一) 使用Excel视图 一) 其 ... -
BootstrapPlugin - daterangepicker 使用笔记
2012-11-13 12:17 20996BootstrapPlugin - daterangepick ... -
SpringMVC杂记(十) 验证码生成
2012-11-06 10:18 2717以前写过一篇关于这个的博客,现在用SpringMVC了,重写一 ... -
SpringMVC杂记(九) 模拟其他类型(非GET,POST)的请求
2012-10-22 10:49 26211) 以前一个小兄弟问我,SpringMVC是否可以使用很多浏 ... -
SpringMVC杂记(八) 使用阿里巴巴的fastjson
2012-07-21 08:27 102191) 国产开源软件要支持的 <dependency& ... -
SpringMVC杂记(七) Jackson与Hibernate LazyLoding无法正常工作解决办法
2012-03-21 13:35 6995SpringMVC杂记(七) Jackson与Hibernat ... -
SpringMVC杂记(六) 下载文件
2012-03-21 09:04 4202SpringMVC杂记(六) 下载文件 1) jar依赖 ... -
SpringMVC杂记(五) JSR303数据验证
2012-03-16 16:30 12372SpringMVC杂记(五) JSR303数据验证 1) 首 ... -
SpringMVC杂记(四) 数据绑定
2012-03-15 13:44 2202SpringMVC杂记(四) 数据绑定 1) 使用java. ... -
SpringMVC杂记(三) 向导型Controller的实现(基于SpringMVC 3.1.1)
2012-03-14 14:59 4595SpringMVC杂记(三) 向导型Controller的实现 ... -
SpringMVC杂记(二) 使用@ResponseBody出现乱码解决方法
2012-03-12 14:02 4122SpringMVC杂记(二) 使用@ResponseBody出 ... -
SpringMVC杂记(一) 文件上传
2012-03-12 13:41 2573SpringMVC杂记(一) 文件上传 1) 添加multi ...
相关推荐
NULL 博文链接:https://yingzhuo.iteye.com/blog/1453438
SpringMVC 开发json接口Demo(含数据库、jar包)。包含:1、SpringMVC 开发json接口.docx;2、springmvc_project.rar;3、students_manage.sql
最新的spring框架,4.2.6,实现rest接口,使用maven开发
SpringMVC构建REST接口的源代码
本代码demo是基于SpringMVC 开发的接口, 详情请看,http://blog.csdn.net/zxw136511485/article/details/52584497
SpringMvc实现移动接口开发,使用RestFul的url风格的接口开发,实现语言java,该Demo只是一个简单的项目例子,便于学习理解,该项目数据库sql有误读者自己创建:数据库(student_manage),表名(student),字段(id,...
自己做的一个springmvc做的接口,比较初级,客户端json请求到服务器,返回json,比较适合初学者
NULL 博文链接:https://yingzhuo.iteye.com/blog/1455438
接口平台代码概览,框架使用springmvc+mybatis
基于springMVC 的restful风格接口前后端使用说明,方便前后端协作开发
获取springMVC中所有http接口及参数元数据示例工程,用于元数据上报等场景。如:可用来生成接口文档,自助测试等。
SpringMVC构建REST接口:第四篇 第一个REST风格的接口的源代码
《SpringMVC+MYBatis企业应用实战》电子版,pdf文件。
SpringMVC_RequestPart_文件上传_example.rar
基于SpringMVC及MyBatis的Web应用框架研究
数据库mongdb+springmvc+framework的最新应用
这个教程,将会向你展示如何在Spring MVC框架中返回JSON格式内容。 使用到的技术: Spring 3.2.2.RELEASE Jackson 1.9.10 JDK 1.6 Eclipse 3.6 Maven 3 PS:在Spring 3 版本,只需要将JackSon包放在classpath根目录...
1、访问地址:http://localhost:8080/springmvc/user/hello?userId=123456 2、配置步骤: 1)引入架包;...3以上版本就支持@PathVariable注解,允许的话,建议采用SpringMVC4,增加了一些新特性 ;
用springmvc框架为别人提供一个接口,返回一串json数据。jsonp服务端。需要调用接口代码也可以联系我。idea。
springMvc data jpa example spring3.1.2 spring-data-jpa1.3.1