- 浏览: 562377 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (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得到域信息
自从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 14208看了一下SpringMVC的源代码,原来SpringMVC也提 ... -
SpringWebflow杂记(一) 框架初探,与SpringMVC的集成
2013-10-23 17:18 1709今日研究了一下SpringWebFlow这个项目,作为Spri ... -
SpringMVC杂记(十六) spring-mvc 与 openid4java
2013-10-12 15:25 3867SpringMVC杂记(十六) spring-mvc 与 op ... -
SpringMVC杂记(十五) spring-mvc controller 的切面
2013-08-01 19:42 6134SpringMVC杂记(十五) spring-mvc cont ... -
SpringMVC杂记(十四) Ajax方式的JSR303认证
2013-06-13 07:29 4520自己定义一个Exception,用来表示数据绑定失败 im ... -
SpringMVC杂记(十三) 使用FreeMarker作为视图层
2013-06-09 11:55 3396实在没什么好说的,直接上配置文件好了 <bean i ... -
SpringMVC杂记(十二) 自定义Interceptor从Active Directory得到域信息
2013-06-04 14:04 3199一)最近项目中要求实现Web应用的SSO(Single Sig ... -
SpringMVC杂记(十一) 使用Excel视图
2013-04-06 16:06 6623SpringMVC杂记(十一) 使用Excel视图 一) 其 ... -
BootstrapPlugin - daterangepicker 使用笔记
2012-11-13 12:17 21071BootstrapPlugin - daterangepick ... -
SpringMVC杂记(十) 验证码生成
2012-11-06 10:18 2783以前写过一篇关于这个的博客,现在用SpringMVC了,重写一 ... -
SpringMVC杂记(九) 模拟其他类型(非GET,POST)的请求
2012-10-22 10:49 26891) 以前一个小兄弟问我,SpringMVC是否可以使用很多浏 ... -
SpringMVC杂记(八) 使用阿里巴巴的fastjson
2012-07-21 08:27 102681) 国产开源软件要支持的 <dependency& ... -
SpringMVC杂记(七) Jackson与Hibernate LazyLoding无法正常工作解决办法
2012-03-21 13:35 7053SpringMVC杂记(七) Jackson与Hibernat ... -
SpringMVC杂记(六) 下载文件
2012-03-21 09:04 4278SpringMVC杂记(六) 下载文件 1) jar依赖 ... -
SpringMVC杂记(五) JSR303数据验证
2012-03-16 16:30 12430SpringMVC杂记(五) JSR303数据验证 1) 首 ... -
SpringMVC杂记(四) 数据绑定
2012-03-15 13:44 2255SpringMVC杂记(四) 数据绑定 1) 使用java. ... -
SpringMVC杂记(三) 向导型Controller的实现(基于SpringMVC 3.1.1)
2012-03-14 14:59 4660SpringMVC杂记(三) 向导型Controller的实现 ... -
SpringMVC杂记(二) 使用@ResponseBody出现乱码解决方法
2012-03-12 14:02 4180SpringMVC杂记(二) 使用@ResponseBody出 ... -
SpringMVC杂记(一) 文件上传
2012-03-12 13:41 2607SpringMVC杂记(一) 文件上传 1) 添加multi ...
相关推荐
SpringMVC 4.2是Spring框架的一个重要版本,它专为构建现代Web应用程序而设计,特别是对于RESTful(Representational State Transfer)接口的开发。REST是一种架构风格,用于构建可伸缩、易于理解的分布式系统,强调...
SpringMVC 3.1.1版本的源码中,Controller接口和相关注解(如@RequestMapping、@SessionAttributes、@ModelAttribute)的实现提供了上述功能的基础。通过阅读源码,我们可以更深入地理解这些特性的内部工作原理。 ...
在本篇《SpringMVC杂记(五) JSR303数据验证》中,我们将深入探讨SpringMVC框架如何集成并使用JSR303(JavaBeans Validation)来进行数据验证,这是一种强大的验证机制,可以确保应用程序接收到的数据是合法且符合...
在这个"SpringMVC 开发接口demo"中,我们将深入探讨如何使用SpringMVC构建RESTful API,以便于开发人员进行数据交互。 1. **SpringMVC基本概念** - **DispatcherServlet**:作为SpringMVC的前端控制器,接收所有...
SpringMVC 开发json接口Demo(含数据库、jar包)。包含:1、SpringMVC 开发json接口.docx;2、springmvc_project.rar;3、students_manage.sql
SpringMVC 是一个基于 Spring 框架的轻量级 Web 开发模块,它使得开发者可以轻松地构建可复用、可维护的 MVC(Model-View-Controller)应用程序。REST(Representational State Transfer)是一种软件架构风格,常...
SpringMVC是Spring框架的一部分,专门用于构建Web应用程序的模型-视图-控制器(MVC)架构。这个接口示例是基于SpringMVC构建的,主要用于处理客户端的JSON请求并返回JSON响应,非常适合初学者学习。 在SpringMVC中...
SpringMvc实现移动接口开发,使用RestFul的url风格的接口开发,实现语言java,该Demo只是一个简单的项目例子,便于学习理解,该项目数据库sql有误读者自己创建:数据库(student_manage),表名(student),字段(id,...
在本篇中,我们将深入探讨如何使用Spring MVC构建RESTful接口,主要关注的是...在"SpringMVC构建REST接口:第四篇 第一个REST风格的接口的源代码"这个主题中,你将找到一个完整的示例,帮助你更好地理解和实践这些知识。
在基于SpringMVC的开发框架中,Restful风格的接口设计越来越受到前后端开发者的青睐。Restful接口以其简洁、高效和易于理解的特点,很好地满足了前后端分离的开发模式。本说明将详细介绍如何在SpringMVC环境下设计并...
这篇博客“SpringMVC源码总结(十)自定义HandlerMethodArgumentResolver”深入探讨了这一主题,旨在帮助读者理解如何扩展Spring MVC的功能,实现自定义的处理器方法参数解析。 首先,我们来看`...
在IT行业中,SpringMVC是Java企业级应用开发中广泛使用的Web MVC框架,它提供了模型-视图-控制器(MVC)模式的实现,使得开发者能够更高效地构建可维护和可扩展的Web应用程序。本篇文章将深入探讨如何利用SpringMVC...
这个教程,将会向你展示如何在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,增加了一些新特性 ;
在IT行业中,SpringMVC作为一个强大的Java Web框架,被广泛应用于构建RESTful API服务。本教程将探讨如何在SpringMVC中实现多版本接口管理、IP访问控制以及使用ANT工具进行打包并部署到Linux服务器。 首先,让我们...
在 "springMvc data jpa example" 中,我们将探讨如何将这两者结合使用,创建一个基于 Spring 3.1.2 和 Spring Data JPA 1.3.1 的示例应用。 首先,让我们深入了解 Spring MVC。Spring MVC 提供了一个模型-视图-...
MongoDB、SpringMVC和Spring Framework是现代Java开发中常用的技术栈,它们分别在数据库管理、Web应用程序构建和整体框架支持方面发挥着重要作用。在这个最新的应用组合中,这些技术协同工作,提供高效、灵活和可...
本文将详细介绍SpringMVC在实战中的应用,包括不同方式控制器的实现与参数传递,以及SpringMVC实例应用的配置和代码实现。 首先,来看SpringMVC控制器的实现。SpringMVC支持多种控制器的实现方式。一种方式是通过...