springMvc自定义注解验证
注解就是一个标记,打了注解就有特殊的标志,如果一个方法上打了这个注解,就可以配合拦截器,拦截器拦截到符合拦截
规则的请求,就拦截成功,然后在拦截器里看这个方法有没有加这个注解即可,有的话看注解里对应的标记值时候符合要求
package com.demo.web.auth;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)/////最高优先级@Order(Ordered.HIGHEST_PRECEDENCE),还可以设置优先级
public @interface AuthPassport {
boolean validate() default true;
}
package com.demo.web.auth;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class AuthInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(handler.getClass().isAssignableFrom(HandlerMethod.class)){
AuthPassport authPassport = ((HandlerMethod) handler).getMethodAnnotation(AuthPassport.class);
//没有声明需要权限,或者声明不验证权限(检验拦截器里面是不是有这个注解)
if(authPassport == null || authPassport.validate() == false)//用方法调用的方式取值
return true;
else{
//在这里实现自己的权限验证逻辑(可以直接把权限插件的(shrio的验证代码引入,如果只是登陆就不必,直接校验登录名,密码即可))
if(false)//如果验证成功返回true(这里直接写false来模拟验证失败的处理)
return true;
else//如果验证失败
{
//返回到登录界面
response.sendRedirect("account/login");
return false;
}
}
}
else
return true;
}
}
<mvc:interceptors>
<!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
<!-- 如果不定义 mvc:mapping path 将拦截所有的URL请求 -->
<bean class="com.demo.web.auth.AuthInterceptor"></bean>
////需要配置map时配置,另一种配置方式,精确拦截
// <mvc:interceptor>
// <mvc:mapping path="/*.do" />
// <bean class="com.party.common.interceptor.AuthCheckInteceptor"/>
// </mvc:interceptor>
</mvc:interceptors>
@AuthPassport(validate='false')//用这种K-Y方式改变注解中的值
@RequestMapping(value={"/index","/hello"})
public ModelAndView index(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "Hello World!");
modelAndView.setViewName("index");
return modelAndView;
}
参考:
http://www.cnblogs.com/liukemng/p/3751338.html
http://www.cnblogs.com/parryyang/p/5413618.html
相关推荐
通过以上步骤,我们实现了自定义注解`@LoggedIn`来获取和验证用户登录信息的功能。这不仅可以简化代码,还能提高代码的可读性和可维护性。在实际开发中,可以根据需求扩展此功能,例如,添加角色权限检查或自定义...
总的来说,Spring MVC的自定义拦截器结合注解的使用,使得在应用程序中添加额外的处理逻辑变得简单且高效。通过自定义拦截器,开发者能够更好地控制请求的生命周期,实现更精细的控制和功能扩展,提高应用的可维护性...
7. **数据绑定和验证**:`@Valid`注解结合JSR 303/349提供的bean验证,可以在处理请求时自动进行数据验证。 8. **拦截器**:`@AspectJ`风格的切面注解,如`@Before`和`@After`,可以创建拦截器,实现请求前后的处理...
创建自定义注解需要使用`@Retention`(指定注解的保留策略,如运行时)和`@Target`(指定注解可以应用于哪些元素,如方法、类等)。 在描述中提到"自定义注解要结合反射才有效果",这是因为Java的注解在编译时并不...
在Spring MVC框架中,注解验证是一个非常重要的功能,它允许开发者通过在控制器方法的参数上添加特定的注解来实现数据验证。这种方式简洁且高效,使得代码更加整洁,易于维护。下面我们将深入探讨Spring MVC中的注解...
### SpringMVC九大常用注解详解 #### 一、@Controller **定义**: `@Controller` 注解是用来标记一个类作为控制器(Controller)组件,在Spring MVC框架中扮演着请求处理者的角色。 **作用**: 通过这个注解,可以将...
1. **注解处理器**:创建一个自定义注解处理器,通常是一个Spring的`@Aspect`组件,它会在方法执行前进行拦截,调用权限服务进行权限验证。 2. **标签库**:定义自定义标签,与Spring的EL表达式结合,获取当前用户...
3. **自定义验证器**:如果标准的验证注解无法满足需求,你可以编写自定义的验证器。这涉及到实现 `javax.validation.ConstraintValidator` 接口,并使用 `@Constraint` 注解定义新的验证规则。 4. **错误处理**:...
在这个名为"springMVC_Validator"的项目中,我们关注的核心是SpringMVC中的表单验证功能,它通过集成Validator接口和使用自定义注解,提供了一种灵活且强大的验证机制。 表单验证在Web应用中扮演着至关重要的角色,...
总结来说,Spring MVC的注解式控制器提供了强大的数据验证、类型转换和格式化功能,简化了Web开发过程,提升了应用的安全性和用户体验。通过合理利用这些特性,开发者可以构建更加健壮、易于维护的Web应用。
例如,创建一个检查邮箱是否已经被注册的自定义注解: ```java @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = UniqueEmailValidator.class) public @interface ...
它为应用程序提供了统一的验证API,允许开发者编写自定义验证器,扩展验证功能。例如,你可以创建一个`@CustomValidator`注解,然后实现对应的验证逻辑。 在Spring MVC中,数据验证通常是通过ModelAttribute注解的...
- **自定义异常处理器(ExceptionHandler)**:通过实现@ExceptionHandler注解,可以在全局范围内捕获并处理特定类型的异常,提高代码的可维护性和可读性。 - **自定义视图解析器(ViewResolver)**:如果使用的...
2. **自定义Validator**:对于更复杂或者标准注解无法满足的验证需求,可以实现Spring的`Validator`接口,创建自定义的验证器。在这个接口中,我们需要重写`supports`方法来确定验证器是否适用于特定的类,以及`...
本项目"springMVC注解开发代码"旨在展示如何通过注解进行 Spring MVC 应用的开发。 首先,`pom.xml` 文件是 Maven 项目的配置文件,它定义了项目依赖和构建设置。在 Spring MVC 开发中,通常会包含 spring-webmvc、...
下面我们将深入探讨SpringMVC自定义拦截器的实现过程和应用场景。 首先,自定义拦截器需要实现`HandlerInterceptor`接口,这个接口定义了三个方法: 1. `preHandle(HttpServletRequest request, ...
Spring MVC通过注解能够将控制器、模型属性、数据绑定、验证规则等信息直接声明在类或方法上,大大减少了XML配置的工作量。本文将深入探讨在Spring MVC中如何利用注解进行实战开发,包括ServletContext注册三大组件...
通过自定义登录页面和逻辑,可以实现更复杂的用户验证和登录体验。 6. **异常处理**:当用户试图访问无权限的资源时,Spring Security会抛出`AccessDeniedException`。你可以自定义异常处理器来捕获并处理这些异常...
Spring MVC通过`@ExceptionHandler`注解处理特定类型的异常,可以自定义错误页面或返回JSON错误信息。 10. **视图解析** 使用`@ResponseBody`时,通常会配合`Jackson`库进行JSON序列化。如果返回视图名称,如`...
在SpringMVC中,你可以通过注解来定义控制器、请求映射、参数绑定等,使得配置文件更加简洁。例如,`@Controller`注解标记一个类为控制器,`@RequestMapping`用于映射HTTP请求到特定的方法。此外,`@RequestParam`、...