[WebApp沙箱]SecurityManager运用 - 蘭陵N散記

作者:JerryXia | 发表于 , 阅读 (0)
在JRE类白名单能控制类的使用权限(请点击),但控制不了一些资源的访问权限。如默认情况下可访问机器下的任意资源,如读取、删除一些文件,网络操作,创建进程与线程等。必须对Web容器下的WebApp进行资源权限访问控制。
Security ManagerJava从JDK 1.0开始就实现一套安全架构,主要用于Applet。在这种体系下Java Code的执行环境被严格划分为两部分,本地代码可以访问计算机的所有资源,而远端代码(Remote Code,主要是Applet)只能支行在严格限制的沙箱里面。安全管理器(SecurityManager)作为一个子系统来决定哪些资源允许沙箱中程序访问。这是一种运行期的安全检查。
SecurityManager是一个API级别的,可自定义的安全策略管理器,它深入到Java API中,在各处都可以见到它的身影。默认情况下,Java应用程序是不设置SecurityManager实例的(意味着不会起到安全检查),这个实例需要我们在程序启动时通过System.setSecurityManager来设置。一般情况下,检查权限是通过SecurityManager...阅读全文

[WebApp沙箱]JRE类白名单运用 - 蘭陵N散記

作者:JerryXia | 发表于 , 阅读 (0)
ClassLoaderJVM类加载器层次结构:
Bootstrap ClassLoader|Extension ClassLoader|System ClassLoaderJVM一启动,会先做一些初始化的动作。一旦初始化动作完成之后,就会产生第一个类加载器,即所谓的Bootstrap Loader, Bootstrap Loader是由C++写成,这个BootstrapLoader所做的初始化中,除了做一些基本的初始化动作之外,最重要的就是加载定义在sun.misc命名空间下的Launcher.java之中的ExtClassLoader(因为是innerclass,所以编译之后会变成Launcher$ExtCjassLoader.class),并设定其Parent为null,代表其父加载器为BootstrapLoader。然后再加载定义于sun.misc命名空间下的Launcher.java之中的AppClassLoader(因为是InnerClass,所以编译之后会变成Launcher$AppClassLoader.class),并设定其Parent为之前产生的ExtClassLo...阅读全文

Java线程使用建议 - 蘭陵N散記

作者:JerryXia | 发表于 , 阅读 (0)
最近Review团队内一些的代码,发现不少使用线程池,但使用的比较乱,针对问题建议如下:
线程不能调用Thread.stop来停止它,我见过有新员工就这么干过哦,而是需要设置一个标识位,在run方法中判断此标识位退出循环。用interrupt也是可以考虑的,但线程的run方法中要捕获InterruptException。
所有线程需要设置Name,主要是方便线程dump出来之后定位问题。这可是编程军规,我们很多的兄弟没有遵守。
大多直接是使用Exectors.newXXX直接new线程池,没有设置队列的大小,默认是整型的最大值,一旦有线程处理阻塞,队列上涨,内存不可控制啊。
最好不要使用newCachedThreadPool,曾经有个模块这么干,在工作线程处理慢时,线程线会不断上涨没能及时回收。这个模块出现异常,线程dump之出来发现有2000多个由它产生的线程,内存超高。
所有线程都要受管理,不允许直接new Thread就直接start就不管了。同样所有从Exectors.newXXX创建的线程池,当bundle去激活时,一定要shutdown。
线程个数设置多少合适?...阅读全文

Git SSH设置 - 蘭陵N散記

作者:JerryXia | 发表于 , 阅读 (0)
Git HTTPS 和 SSH 的区别:
前者可以随意克隆github上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key ,否则无法克隆。
https url 在push的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。
首先检查是否已经有 SSH key运行 git Bash 客户端,输入如下代码:
$ cd ~/.ssh$ ls这两个命令就是检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,那么你可以跳过步骤2,直接进入步骤3。
创建一个 SSH key$ ssh-keygen -t rsa -C "your_email@example.com"参数含义:
-t 指定密钥类型,默认是 rsa ,可以省略。
-C 设置注释文字,比如邮箱。
-f 指定密钥文件存储文件名。
以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生...阅读全文

做一名好的开发人员 - 蘭陵N散記

作者:JerryXia | 发表于 , 阅读 (0)
阅读:2167 字 ~5分钟我在上一次的新员工交流会议上,问新员工对全栈工程师了解不,我们的目标是成为一名全栈工作师,而不是做一名只会写代码的码工。最近遇到一些不开心的事,可能是在华为呆久了,发现到底都要会学扯皮。而我性情不太喜欢做一些自认为这些是无意义的事情。虽然有前辈告诉我,扯皮可能的效果会让你少加班几个月。说着说着,有点偏了,扯皮其实是沟通成本。项目越大,沟通成本越高。带个项目的人都会意识到,项目中的人力是1+1<2的,人越多效率越低。因为沟通是需要成本的,不同技术的人各说各话,前端和后端是一定会掐架的。每个人都会为自己的利益而战,毫不为已的人是不存在的。
减少沟通成本,我们需要全栈工程师,因为各种技术都懂,胸有成竹,自己就全做了。即使是在团队协作中,与不同技术人员的沟通也会容易得多。懂你的,你懂的,相互理解,也就少了很多的时间在扯。那什么是全栈工程师:通俗地讲,掌握多种技能,并能利用多种技能独立完成产品的人。打外比方,全栈工程师就是一个能独立盖一幢10层小洋楼的人,而普通工程师,则是可以和一群人盖一幢摩天大楼的人。较搞地讲,全栈工程师=**丝战斗机=系统+网络+研发+DBA+...阅读全文