- 博客(12)
- 问答 (1)
- 收藏
- 关注
原创 Spring+Mybatis应对代码扫描SQL注入问题
Spring+Mybatis应对代码扫描SQL注入问题在一些代码安全扫描中,经常会出现难以处理的“SQL注入”漏洞,也就是在Mybatis的Mapper中使用了${},这些地方无法轻易改为#{},例如需要动态决定查询的表名。那么我们应该如何应对这种棘手的情况呢?首先,我们做一个假设,扫描软件只能识别$。在这种情况下,我们可以考虑改变Mapper中的占位符,比如改为@{}。这样,我们只需要在SQL语句被实际执行前,把写在代码里的@替换成$就行了,功能不会受影响,且扫描软件无法发现。直接上代码:@C
2021-09-03 16:30:53
2368
1
原创 SpringBoot自定义Filter无法获取shiro session
SpringBoot自定义Filter无法获取shiro session最近在配置自定义filter时发现了一个问题:无法获取session。简单debug了一下发现shiro filter总是在filter链的最后,而我们知道如果要使用shiro session,必须要在shiro filter执行之后才行。为什么shiro filter总是在filter链最后呢?进一步debug发现,当我们通过ShiroFilterFactoryBean配置shiro filter时,最终实际装配到Spring
2021-04-10 09:20:05
1034
2
翻译 java.util.concurrent.locks.AbstractQueuedSynchronizer介绍(Javadoc翻译)
提供一个实现阻塞锁和基于先进先出等待队列的同步器(信号量,事件等等)的框架。这个类被设计出来作为大多数同步器的基类,这些同步器依靠一个单一的原子int值来代表状态。//volatile int 或 AtomicInteger。子类必须定义一个protected的方法来改变这个状态,以及定义这个状态在获取和释放此类的对象时的意义。//获取和释放锁时state值是多少。基于这些,此类中的其他方法实现所有排队和阻塞的机制。子类可以维护其他的状态字段,但只有那个原子int值被用于同步,这个值通过getState,s
2020-08-05 17:11:46
2990
翻译 java.nio.channels.Selector介绍(Javadoc翻译)
Selector是多个SelectableChannel对象的多路复用器。//一个Selector对应多个SelectableChannel。Selector对象可以通过调用Selector.open()方法创建,这将会使用系统默认的SelectorProvider来创建一个新的Selector。Selector对象也可以通过调用(自定义的SelectorProvider对象的)openSelector()方法创建。Selector会一直保持打开状态直到通过调用close()方法关闭它。一个Select
2020-08-04 12:17:46
635
原创 Javascript中Uint8Array转base64字符串
直接上代码function arrayBufferToBase64(array) { array = new Uint8Array(array); var length = array.byteLength; var table = ['A','B','C','D','E','F','G','H', 'I','J','K','L','M','N','O','P',
2020-07-17 15:04:24
3506
4
原创 Spring容器刷新之obtainFreshBeanFactory
obtainFreshBeanFactory是容器刷新的第二步,主要是刷新beanfactory,然后返回beanfactory。 protected ConfigurableListableBeanFactory obtainFreshBeanFactory() { refreshBeanFactory(); //模版方法,子类实现 return getBeanFactory(); ...
2020-04-19 01:30:39
241
原创 Spring容器刷新之prepareRefresh
prepareRefresh是容器刷新的第一步,过程比较简单,直接看中文注释。 protected void prepareRefresh() { // Switch to active. this.startupDate = System.currentTimeMillis(); //记录启动时间 //设置启动标志 this.closed.set(false); this...
2020-04-18 22:45:18
209
原创 Spring容器刷新之invokeBeanFactoryPostProcessors
invokeBeanFactoryPostProcessors是容器刷新的第五步,其作用就是创建已注册的BeanFactoryPostProceessor并执行他们的postProcess处理方法。这一过程的核心方法就是PostProcessorRegistrationDelegate类的静态方法invokeBeanFactoryPostProcessors(ConfigurableListabl...
2020-04-03 02:11:59
235
原创 Java内部类的弟弟行为
public OutterClass { public int a = new InnerClass().a; private class InnerClass { private int a = 3; private InnerClass(){} } private class InnerClass2 { private int a2 = new In...
2019-05-14 09:10:55
171
原创 Java8对lambda进行强制类型转换的技巧
今天在看Java8里Map的源码时发现了一个从没见过的写法public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K, V>> comparingByKey() { return (Comparator<Map.Entry<K, V>&...
2019-05-07 23:22:36
1188
原创 bootstrap模态框闪退,原因竟是......
bootstrap模态框闪退神坑如果你的触发器是一个button,而且这个button在一个form中,你一定要手动指定button的type=“button”,否则默认是"submit",点一下你的表单就提交了,页面刷新,你的模态框自然就闪退了。...
2019-03-27 17:04:16
1046
原创 四位吸血鬼数
四位吸血鬼数算法题目来自《Thinking in Java》第四版,第四章最后一道练习题。下面是我的代码:public static void main(String args[]) { long t1 = System.currentTimeMillis(); int number = 0; int[] combo = new int[4]; left: for(i...
2018-10-25 11:46:04
389
空空如也
关于AES密钥破解的问题
2020-07-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人