java String Map List 转换
java String Map List 转换
String completeByParam = dispatchFeign.getCompleteByParam("用车", startTime, endTime, page, limit); System.out.println("completeByParam = " + completeByParam); Map json = JSONObject.parseObject(completeByParam, Map.class); System.out.println("json = " + json); String data = json.get("data").toString(); System.out.println("data = " + data); Map map = JSONObject.parseObject(data, Map.class); System.out.println("map = " + map); String list = map.get("list").toString(); System.out.println("list = " + list); List<Map<String, Object>> list1 = Lists.newArrayList(); if (StringUtils.isNotEmpty(list)) { list1 = JSONArray.parseObject(list, List.class); } System.out.println("list1 = " + list1); for (Map<String, Object> l : list1) { System.out.println("l = " + l); } // 实体类 List<实体类> list = JSONArray.parseArray(content).toJavaList(实体类.class);
// map 转 实体类
实体类 bo = JSON.parseObject(JSON.toJSONString(data), 实体类.class);
// 将 实体类 转换为 Map Map map = JSON.parseObject(JSON.toJSONString(user), Map.class);
截取最后一位
// StringBuffer 截取 StringBuffer s = new StringBuffer(); if (s.length() > 1) { s.deleteCharAt(s.length() - 1); }
如何防止xss攻击
XSS攻击通常指的是利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页的程序。
这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。
攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。 如何防范XSS: 1. 自己写 filter 拦截来实现。这个filter不但可以拦截xss攻击,也可以拦截sql注入攻击。
但要注意的时,在WEB.XML 中配置 filter 的时候,最好将这个 filter 放在第一位。 我们知道filter谁的写在上面,谁先被过滤。
比如我们有一个是否登录的过滤器如果放在上面,结果因为有漏洞,通过sql注入可以实现免登陆,
而黑客利用,导致了直接登录就麻烦了。所以要先过滤一些特殊字符,再放行去做其他业务。 这个过滤器里面可以匹配一些sql注入的关键字和一些xss攻击的关键字,xss攻击的关键字包括: script,alert,img,src、eval 、javascript等关键字, 拦截到后处理方法也有很多。 a、可以全部替换成空字符串,简单粗暴,但是可能造成错误显示。 b、可以转换成全角字符 c、可以使用html实体编码,url编码等 "<" "<" 这要根据具体实际的情况来判断该怎么使用了。 filter过滤器使用相对麻烦,要建立一套完备的匹配库,否则有可能xss漏洞过滤不到,或则过滤的太多影响程序功能。但是filter可以根据自己程序实际情况随心定制。 2、ESAPI框架实现。 ESAPI是一套API级别的web应用解决方案。简单的说,ESAPI就是为了编写出更加安全的代码而设计出来的一些API,方便使用者调用,从而方便的编写安全的代码。 a、引入Jar org.owasp.esapi esapi 2.1.0.1 b、加入配置文件 在工程的资源文件目录下增加配置文件ESAPI.properties及validation.properties,文件内容可为空。如果为空则都取默认值。也可以手动配置。 c、校验参数使用 ESAPI提供了很多常见的校验,可以方便针对不同的需要做校验。 ESAPI提供了很多常见的校验,可以方便针对不同的需要做校验 if(!ESAPI.validator().isValidInput("",input,"Email",11,false)){ System.out.println("出错了"); } 这种方式:结构清晰,易于扩展。如果想省事,可以使用默认配置,也可以自己定制。 ESAPI参考:https://blog.csdn.net/frog4/article/details/81876462 3、spring实现。 首先添加一个jar包:commons-lang-2.5.jar ,然后在后台调用这些函数 StringEscapeUtils.escapeHtml(string);
//转移html脚本StringEscapeUtils.escapeJavaScript(string);
//转移JavaScript脚本StringEscapeUtils.escapeSql(string);
//转移sql脚本 或则结合springMVC的InitBinder使用 @InitBinder只在@Controller中注解方法来为这个控制器注册一个绑定器初始化方法,方法只对本控制器有效。 /** * 防止XSS攻击 */
binder.registerCustomEditor(String.class, new StringEscapeEditor());
//告诉spring String 类型的参数StringEscapeEditor来管了,它来处理 使用简单方便,但是不能定制过滤方式。
参考地址:https://www.toutiao.com/i6792402396845703693/
spring ioc aop 反射 动态代理之间的原理和关系
1、类加载器加载class文件 2、加载到jvm 中,obtainFreshBeanFactory()里的refreshBeanFactory()来为每个bean生成 一个BeanDefinition , 注意此时不是我们想要的对象,只是bean的信息,依赖关系等,后续后面spring解析器去解析一个BeanDefinition。 3、BeanDefinition信息注册, 将抽象好的BeanDefinition统一注册到IoC容器中,IoC容器是通过hashMap来维护BeanDefinition信息的,key为beanName,value为BeanDefinition。 4、createBeanInstance()根据beanDefinition的信息创建bean的实例 怎么创建呢?主要有两种方法,一种是通过beanUtil反射,另一种 CGLIB来实例化对象,如果Bean定义中有方法覆盖,则就需要CGLIB父 。。。 7、至于aop特性是实例化好了之后,后置处理来处理 如果我们spring配置了AOP的话,这个时候就要考虑是cglib还是jdk 动态代理去实现这个功能 1、在默认情况下,如果spring bean有接口就使用jdk的动态代理。Proxy.newProxyInstance。如果没有接口就调用cglib通过操作字节码去生成目标类的子类来完成代理。 2、可以手动配置,强制都使用cglib,如果xml中配置 proxy-target-class=true 或则在注解上配置 @EnableAspectJAutoProxy(proxyTargetClass=true) 这个时候就全部使用cglib来完成动态代理 记得aop特性是初始化的时候完成的 4、如果需要类,spring 可以通过注解 或则代码去 map中 获取bean 。
Java 0和1代表的含义
在Java中: 1、整数型的0和1: 代表数字0和1 2、boolean类型的0和1: 0代表:false(也就是说整数型的0转为布尔类型时输出false) 1代表:true(整数1转换为布尔类型输出true) 其实在整数转布尔类型时:0为false,非0为true,当然1也是true; 3、在二进制最高位: 0代表:正数 1代表:负数