BeanUtils

shiro的认证、授权、会话、加密

北战南征 提交于 2020-08-04 17:50:05
shiro shiro是一个基于java的开源的安全管理框架,可以完成认证,授权,会话管理,加密,缓存功能。 为什么学习shiro 在java的世界中,安全管理框架有spring security和shiro。spring security主要依赖于spring,并且比较复杂,学习曲线较高。shiro比较简单,而且其比较独立,既可以javaSE中使用,也可以在javaEE中使用,并且在分布式集群的环境下也可以使用。 shiro的结构体系 Authentication认证:验证用户是否合法。==>就是验证登录; Authorization授权:授予谁具有访问某些资源的权限; SessionManagement:会话管理,用户登录后的用户信息通过SessionManagent进行管理,不管是在什么应用中 Cryphography:提供了一些常见的加密算法,使得在应用中可以很方便的实现数据安全。 WebSupport:提供web应用程序支持 Caching缓存:提供了对缓存的支持,支持多种缓存架构:如ehcache,还支持缓存数据库-redis Concurrency:支持多线程并发访问 Testing:测试 Run As:支持一个用户在允许的前提下使用另一个身份进行登录; RememberMe:记住我 Subject=身份+凭证====>用户名和密码【用户获取主体的信息

反射面试题-请了解下

混江龙づ霸主 提交于 2020-08-04 13:36:42
什么是反射? 反射就是动态加载对象,并对对象进行剖析。在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,这种动态获取信息以及动态调用对象方法的功能成为Java反射机制。 反射的基本操作 创建一个类,用于演示反射的基本操作,代码如下: package fs; public class Student { private long id; private String name; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 获取类中的所有方法 public static void main(String[] args) { try { Class<?> clz = Class.forName("fs.Student"); Method[] methods = clz.getMethods(); for (Method method : methods) { System.out.println("方法名:" +

DO-DTO相互转换时的性能优化

ⅰ亾dé卋堺 提交于 2020-05-08 05:55:07
一般情况下,DO是用来映射数据库记录的实体类,DTO是用来在网络上传输的实体类。两者的不同除了适用场景不同外还有就是DTO需要实现序列化接口。从DB查询到数据之后,ORM框架会把数据转换成DO对象,通常我们需要再把DO对象转换为DTO对象。同样的,插入数据到DB之前需要将DTO对象转换为DO对象然后交给ORM框架去执行JDBC。 通常用到的转换工具类BeanUtils是通过反射来实现的,实现源码如下 public static <T> T convertObject(Object sourceObj, Class<T> targetClz) { if (sourceObj == null) { return null; } if (targetClz == null) { throw new IllegalArgumentException("parameter clz shoud not be null"); } try { Object targetObj = targetClz.newInstance(); BeanUtils.copyProperties(sourceObj, targetObj); return (T) targetObj; } catch (Exception e) { throw new RuntimeException(e); } } private

神奇的Scala Macro之旅(四)- BeanBuilder

给你一囗甜甜゛ 提交于 2020-05-02 10:24:20
在Java开发中,经常会有一个需求,将一个 Bean 复制到另外一个 Bean,尤其是在后台分层的场景下,在不同的层之间传递信息,经常需要进行 这样的一个对象复制工作,类似于: val source : PersonSource = ... val dest = new PersonDest() dest.setName( source.getName ) dest.setEmail( source.getEmail ) dest.setAddress( source.getAddress ) ... 因为这样的代码过于冗长,大量的这样的代码,大大的提升了代码的复杂性,不仅工作无趣,而且很容易遗漏,代码可阅读性差。万能的程序员 自然就会发明一个又一个的轮子来解决这个问题: apache BeanUtils dozer:http://dozer.sourceforge.net orika:http://orika-mapper.github.io/ 所有这样的轮子,都包括这样的一些特性: 字段映射。 一般通过同名字段映射,或者使用 annotation 定义Bean间的字段映射。 类型映射。 诸如完成 String -> Int 这样的类型转换。 嵌套映射。 BeanUtils是一个最简单的,通过reflection来实现对象间的映射,这样存在的问题是有很大的反射开销

java大文件上传解决方案支持分片断点上传

拟墨画扇 提交于 2020-05-01 18:35:26
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1. 通过form表单向后端发送请求 <form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data"> <div class="bbxx wrap"> <input type="text" id="side-profile-name" name="username" class="form-control"> <input type="file" id="example-file-input" name="avatar"> <button type="submit" class="btn btn-effect-ripple btn-primary">Save</button> </div> </form> 改进后的代码不需要form标签,直接由控件来实现。开发人员只需要关注业务逻辑即可。JS中已经帮我们封闭好了 通过监控工具可以看到控件提交的数据,非常的清晰,调试也非常的简单。 2. 通过ajax向后端发送请求 1. $.ajax({ url : "${pageContext

SpringMVC 超大文件上传解决方案:分片断点上传(一)

≯℡__Kan透↙ 提交于 2020-04-28 13:52:56
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1. 通过form表单向后端发送请求 <form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data"> <div class="bbxx wrap"> <input type="text" id="side-profile-name" name="username" class="form-control"> <input type="file" id="example-file-input" name="avatar"> <button type="submit" class="btn btn-effect-ripple btn-primary">Save</button> </div> </form> 改进后的代码不需要form标签,直接由控件来实现。开发人员只需要关注业务逻辑即可。JS中已经帮我们封闭好了 通过监控工具可以看到控件提交的数据,非常的清晰,调试也非常的简单。 2. 通过ajax向后端发送请求 1. $.ajax({ url : "${pageContext

spring5 源码深度解析-----IOC 之 属性填充

家住魔仙堡 提交于 2020-04-28 02:24:54
doCreateBean() 主要用于完成 bean 的创建和初始化工作,我们可以将其分为四个过程: createBeanInstance() 实例化 bean populateBean() 属性填充 循环依赖的处理 initializeBean() 初始化 bean 第一个过程实例化 bean在前面一篇博客中已经分析完了,这篇博客开始分析 属性填充,也就是 populateBean() protected void populateBean(String beanName, RootBeanDefinition mbd, BeanWrapper bw) { PropertyValues pvs = mbd.getPropertyValues(); if (bw == null ) { if (! pvs.isEmpty()) { throw new BeanCreationException( mbd.getResourceDescription(), beanName, "Cannot apply property values to null instance" ); } else { // Skip property population phase for null instance. return ; } } // Give any

JAVA 超大文件上传解决方案:分片断点上传(一)

你。 提交于 2020-04-26 15:59:20
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1. 通过form表单向后端发送请求 <form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data"> <div class="bbxx wrap"> <input type="text" id="side-profile-name" name="username" class="form-control"> <input type="file" id="example-file-input" name="avatar"> <button type="submit" class="btn btn-effect-ripple btn-primary">Save</button> </div> </form> 改进后的代码不需要form标签,直接由控件来实现。开发人员只需要关注业务逻辑即可。JS中已经帮我们封闭好了 通过监控工具可以看到控件提交的数据,非常的清晰,调试也非常的简单。 2. 通过ajax向后端发送请求 1. $.ajax({ url : "${pageContext

这样设计 Java 异常更优雅,赶紧学!

*爱你&永不变心* 提交于 2020-04-24 17:42:12
作者:西格玛 lrwinx.github.io/2016/04/28/如何优雅的设计java异常/ 2019-08-20 09:31:00 导语 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的开发经验来谈一谈我是如何对异常进行处理的。 由于本文只作一些经验之谈,不涉及到基础知识部分,如果读者对异常的概念还很模糊,请先查看基础知识。 如何选择异常类型 异常的类别 正如我们所知道的,java中的异常的超类是java.lang.Throwable(后文省略为Throwable),它有两个比较重要的子类,java.lang.Exception(后文省略为Exception)和java.lang.Error(后文省略为Error),其中Error由JVM虚拟机进行管理,如我们所熟知的OutOfMemoryError异常等,所以我们本文不关注Error异常,那么我们细说一下Exception异常。 Exception异常有个比较重要的子类,叫做RuntimeException。我们将RuntimeException或其他继承自RuntimeException的子类称为非受检异常(unchecked Exception),其他继承自Exception异常的子类称为受检异常(checked Exception)

SpringBoot启动流程分析(三):SpringApplication的run方法之prepareContext()方法

安稳与你 提交于 2020-04-22 08:20:23
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇:    Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一):SpringApplication类初始化过程 SpringBoot启动流程分析(二):SpringApplication的run方法 SpringBoot启动流程分析(三):SpringApplication的run方法之prepareContext()方法 SpringBoot启动流程分析(四):IoC容器的初始化过程 SpringBoot启动流程分析(五):SpringBoot自动装配原理实现 SpringBoot启动流程分析(六):IoC容器依赖注入 笔者注释版Spring Framework与SpringBoot源码git传送门:请不要吝啬小星星 spring-framework-5.0.8.RELEASE SpringBoot-2.0.4.RELEASE 第四步:刷新应用上下文前的准备阶段 一、prepareContext()方法   前面我们介绍了SpringBoot 启动流程run()方法的前三步,本章,我们将用一个章节介绍:第四步:刷新应用上下文前的准备阶段。也就是prepareContext()方法。   首先看prepareContext()方法。 1