- 浏览: 57346 次
- 性别:
博客专栏
-
从零编写RPC框架
浏览量:0
文章分类
最新评论
-
39er:
请问如果采用同步方式,并行转换多个文档,会有问题吗
关于office转换pdf完美终极解决方案 -
Knightzxf:
Java操作word转PDF的功能除了你介绍的这几种外,还有其 ...
关于office转换pdf完美终极解决方案 -
javatozhang:
非常不错!!!
浅谈分布式项目日志监控
今天群里小伙伴有个需求,希望通过role来控制pojo字段校验。采用方式为spirng securtity+
spring validate 实现
spring4.0+ 默认支持jsr303。spring validate 也支持自定义valdiate注解。因此采用自定义validate注解实现
代码地址:https://github.com/ChenXun1989/role-validate
自定义validate注解
实现constraintValidator 接口
表单对象
权限控制
controler配置
页面测试
spring validate 实现
spring4.0+ 默认支持jsr303。spring validate 也支持自定义valdiate注解。因此采用自定义validate注解实现
代码地址:https://github.com/ChenXun1989/role-validate
自定义validate注解
/** * Project Name:chenxun-cros * File Name:RoleConstraint.java * Package Name:com.chenxun.validate * Date:2016年8月26日上午10:42:53 * Copyright (c) 2016, www midaigroup com Technology Co., Ltd. All Rights Reserved. * */ package com.chenxun.example.validate; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload; import javax.validation.constraints.NotNull; /** * ClassName:RoleConstraint <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2016年8月26日 上午10:42:53 <br/> * @author 陈勋 * @version * @since JDK 1.7 * @see */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy=RoleConstraintValidator.class) public @interface RoleConstraint { String message() default "ACCESS DENIED !"; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; /** * * values:(角色列表). <br/> * ROLE_ADMIN,ROLE_USER * @author 陈勋 * @return * @since JDK 1.7 */ String[] value(); }
实现constraintValidator 接口
/** * Project Name:chenxun-cros * File Name:RoleConstraintValidator.java * Package Name:com.chenxun.validate * Date:2016年8月26日上午10:39:29 * Copyright (c) 2016, www midaigroup com Technology Co., Ltd. All Rights Reserved. * */ package com.chenxun.example.validate; import java.lang.annotation.Annotation; import java.util.Collection; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorContextImpl; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; /** * ClassName:RoleConstraintValidator <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2016年8月26日 上午10:39:29 <br/> * * @author 陈勋 * @version * @since JDK 1.7 * @see */ public class RoleConstraintValidator implements ConstraintValidator<Annotation, Object> { @Override public void initialize(Annotation constraintAnnotation) { // 初始化动作 可以提升性能。缓存用户的 所有字段。 优化下个方法调用 } @Override public boolean isValid(Object value, ConstraintValidatorContext context) { //默认值处理 if (value == null) { return true; } if (value instanceof Number) { Number num = (Number) value; if (num.byteValue() == 0) { return true; } } // 获取当前用户的角色列表 ConstraintValidatorContextImpl cvci = (ConstraintValidatorContextImpl) context; RoleConstraint rc = (RoleConstraint) cvci.getConstraintDescriptor() .getAnnotation(); String[] roles = rc.value(); // 执行相关逻辑 角色和资源的关系(是否拥有资源权限) // 注意该校验与 value值无关 Collection<? extends GrantedAuthority> auths = SecurityContextHolder .getContext().getAuthentication().getAuthorities(); for (GrantedAuthority auth : auths) { // 简单原则,有其中一个角色即可 for (String role : roles) { if (role.equals(auth.getAuthority())) { return true; } } } return false; } }
表单对象
/** * Project Name:validate-role * File Name:Product.java * Package Name:com.chenxun.example.entity * Date:2016年8月26日下午12:59:12 * Copyright (c) 2016, www midaigroup com Technology Co., Ltd. All Rights Reserved. * */ package com.chenxun.example.entity; import lombok.Data; import com.chenxun.example.validate.RoleConstraint; /** * ClassName:Product <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2016年8月26日 下午12:59:12 <br/> * @author 陈勋 * @version * @since JDK 1.7 * @see */ @Data public class Product { private String name; @RoleConstraint("ROLE_USER") private String password; @RoleConstraint("ROLE_ADMIN") private String desc; }
权限控制
/** * Project Name:validate-role * File Name:SecurityConfig.java * Package Name:com.chenxun.example.config * Date:2016年8月26日下午1:04:18 * Copyright (c) 2016, www midaigroup com Technology Co., Ltd. All Rights Reserved. * */ package com.chenxun.example.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; /** * ClassName:SecurityConfig <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2016年8月26日 下午1:04:18 <br/> * @author 陈勋 * @version * @since JDK 1.7 * @see */ @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("admin").password("admin").roles("USER","ADMIN") .and().withUser("user").password("user").roles("USER"); } @Override protected void configure(HttpSecurity http) throws Exception { http.formLogin().defaultSuccessUrl("/index.html"); http.csrf().disable(); http.authorizeRequests().antMatchers("/**").hasRole("USER"); } }
/** * Project Name:validate-role * File Name:SecurityWebApplicationInitializer.java * Package Name:com.chenxun.example.config * Date:2016年8月26日下午1:37:41 * Copyright (c) 2016, www midaigroup com Technology Co., Ltd. All Rights Reserved. * */ package com.chenxun.example.config; import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; /** * ClassName:SecurityWebApplicationInitializer <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2016年8月26日 下午1:37:41 <br/> * @author 陈勋 * @version * @since JDK 1.7 * @see */ public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer{ }
controler配置
package com.chenxun.example.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import org.springframework.core.io.Resource; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.annotation.Secured; import org.springframework.util.FileCopyUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.View; import com.chenxun.example.entity.Product; /** * * ClassName: ProdudctController <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON(可选). <br/> * date: 2016年8月26日 下午12:58:23 <br/> * * @author 陈勋 * @version * @since JDK 1.7 */ @RestController public class ProdudctController { @PostMapping("/product") public ResponseEntity<String> product(@Valid @RequestBody Product product,BindingResult result){ if(result.hasErrors()){ return ResponseEntity.ok(result.getFieldError().getDefaultMessage()); } return ResponseEntity.ok("SUCCESS"); } }
页面测试
<!DOCTYPE html> <html > <head> <meta charset="utf-8"> <title>index</title> <script type="text/javascript" src="jquery.min.js"></script> </head> <body > <h1>Hello world</h1> <input type="button" value="testRoleUser" id="add1"> <input type="button" value="testRoleAdmin" id="add2"> <a href="/logout">重新登陆</a> <script type="text/javascript"> $(function(){ $("#add1").on("click",function(){ var values={ name:"abc", password:"pass" } $.ajax({ url:"product", type:"post", contentType:"application/json", data:JSON.stringify(values) , success:function(res){ alert(res); } }); }); $("#add2").on("click",function(){ var values={ name:"abc", desc:"pass" } $.ajax({ url:"product", type:"post", contentType:"application/json", data:JSON.stringify(values) , success:function(res){ alert(res); } }); }); }); </script> </body> </html>
发表评论
-
浅谈分布式项目日志监控
2016-11-04 13:52 6390目前公司项目采用dubbo服务化升级之后,原先大而全的几 ... -
java线程池demo
2016-09-02 15:12 1729接口 /** * Project Name:chenx ... -
solr中文分词
2016-08-21 14:37 824solr中文分词。 solr5.0 自带一个中文分词 ... -
solrcloud搭建
2016-08-20 18:27 1866群里小伙伴需要一个solrcloud的解决案例。正好好久 ... -
基于jquery把表单转成成json对象
2016-08-18 10:48 865最近前端框架修改,小伙伴希望能像以前写jsp一样使用 对象.属 ... -
springRest+cross跨域支持
2016-06-17 15:51 515最近一个接口项目需要支持跨域访问,基于cross实现。于是 ... -
java内存机制解析(二)
2016-05-04 22:25 0java内存溢出异常解析:OutOfMemoryErro ... -
java内存机制解析(一)
2016-05-04 22:01 450最近在看一些java底层知识,搬了这么久时间的砖头,也是时候了 ... -
关于office转换pdf完美终极解决方案
2016-03-12 11:54 7864最近项目上面有个需求,将用户上传的office格式转 ... -
关于ModelMap的小事
2016-03-08 18:54 1079今天对一个老系统框架的升级,需要修改原先响应的http报文 ... -
spring整合quartz任务调度框架使用
2016-02-26 14:57 453调度器 <bean autowire=" ... -
spring整合memcache
2016-02-26 14:50 449Xmemcached是基于java nio实现的高性能可扩 ... -
spring整合mongodb
2016-02-26 14:36 600MongoDB.是一个介于关 ... -
web项目整合solr服务实现全文检索
2016-02-26 14:24 5574Solr是一个高性能,采用Java5开发,Solr基于Lu ... -
java web权限管理
2015-12-18 14:29 1262之前项目采用spring4+security3做的权限管 ... -
spring4采用JSR349标准校验数据
2015-12-18 14:05 664Spring4.1内置支持了JSR349校验数据,相关配 ... -
spring4整合rest风格配置
2015-12-18 13:55 1188最近手头上有个新项目,打算采用前端js渲染+后端调用r ...
相关推荐
基于Bootstrap与jQuery-validate的个人封装检验框架demo,拥有良好的UI与用户体验.博客地址:http://blog.csdn.net/u010506919/article/details/75137353
本项目"基于Bootstrap与jQuery-validate的个人封装检验框架demo"是一个很好的实践示例,展示了如何将这两个强大的库结合使用,以创建具有出色UI和用户体验的验证框架。 Bootstrap是由Twitter开发的一个开源前端框架...
标题中的"validate方法"通常指的是在编程中用于验证数据或对象的方法。...在实际开发中,正确地应用validate方法可以预防各种潜在的问题,如用户输入错误、安全漏洞等,从而提升用户体验和系统的稳定性。
在网页开发中,jQuery Validate 是一个非常常用的验证插件,用于对用户输入的数据进行校验,确保数据的有效性和完整性。这个插件可以帮助开发者创建复杂的表单验证规则,提高用户体验,减少服务器端的压力。结合 ...
首先,jQuery Validate插件是基于流行的JavaScript库jQuery构建的,因此在使用之前,需要确保页面已经引入了jQuery。接着,我们引入jQuery Validate的核心文件`jquery.validate.js`,它包含了验证插件的主要功能。...
jQuery Validate 是一款强大的表单验证插件,基于 jQuery 框架开发而成。它能够帮助开发者轻松实现客户端表单验证功能,大大提高了用户体验并减少了服务器端的压力。通过简单地配置选项,即可启用各种内置验证规则。...
jQuery Validate 是一个强大的JavaScript库,专门...总之,jQuery Validate 1.1.2是前端开发者的得力工具,能够有效地处理表单验证,提供了一种优雅的方式来确保用户输入的数据质量,提升了网站的安全性和用户体验。
- 为了不影响现有用户,可以在安装插件前创建一个没有启用该插件的新用户组,然后将新用户分配到这个组。 通过以上步骤,你便成功安装了MySQL的validate_password插件,并可以根据需要调整密码策略,为数据库系统...
jquery.validate.1.9.0.min.js jquery.validate.1.12.0.min.js jquery.validate.1.13.1.min.js jquery.validate.1.16.0.min.js jquery.validate.1.14.0.min.js jquery.validate.1.15.1.min.js jquery.validate....
在实际应用中,开发者可以利用FormValidate轻松设置验证规则,避免用户提交无效或错误的数据。例如,可以使用它来验证用户注册时的邮箱格式、密码强度,或者在购物车结算时验证收货地址的完整性。同时,通过查阅CHM...
《jQuery Validate插件详解与实例应用》 ...通过学习和掌握jQuery Validate,我们可以为用户提供更加友好、安全的表单交互体验。在实际项目中,可以根据需求调整和扩展验证规则,以满足各种复杂场景。
以上就是jQuery Validate的基本使用和核心概念,通过熟练掌握这些,你可以轻松实现高效且用户友好的表单验证。记住,始终要关注用户体验,避免过于繁琐的验证过程,同时确保数据安全性和准确性。
《jQuery Validate插件详解与应用》 在Web开发中,表单验证是不可或缺的一部分,而jQuery Validate插件作为一款强大的JavaScript验证工具,极大地简化了这一过程。本文将深入探讨jQuery Validate插件的基本概念、...
jquery.validate.js jquery.validate.js
《jQuery Validate验证手册》是针对JavaScript库jQuery的一个插件,主要功能是提供强大的表单验证功能,帮助开发者创建用户友好的、功能丰富的交互式表单。这个插件基于jQuery库,利用JavaScript的强大功能,简化了...
《jQuery.validate 用法详解及源码解析》 在网页开发中,表单验证是必不可少的一环,确保用户输入的数据符合预设的规则,避免无效数据的...对于任何涉及用户输入验证的项目,jQuery.validate都是一个值得信赖的选择。
jQuery UI是一个基于jQuery的库,它扩展了基本的jQuery功能,提供了大量的用户界面组件和交互效果。这些组件包括但不限于: 1. **对话框(Dialogs)**:用于创建弹出式窗口,可以用于警告、确认或提供更多信息。 2....
Struts1.2框架是Apache组织开发的一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架。在Struts1.2中,`validate`机制是用于处理表单验证的重要部分,它帮助开发者在用户提交数据之前检查输入的...
本文将深入探讨如何在Python环境中实现基于用户协同过滤的推荐系统,并结合 Movielens 数据集进行实践。 首先,协同过滤是一种基于用户行为的推荐方法,它假设如果两个用户在过去对某些物品有相似的评价,那么他们...
在IT行业中,`validate验证`是一个非常重要的环节,特别是在前端开发中,用于确保用户输入的数据是合法、有效和安全的。`jQuery Validate`是一个广泛使用的jQuery插件,它提供了强大的表单验证功能,使得开发者可以...