开发规范

命名规范

  • package所有字母必须小写,且名称为对应业务的英文;
  • 实体类相关类名以表名开头;lm_sm_user,对应UserAction、UserService、UserDao
  • 方法命名:
    新增 -- save/create 开头
    修改 -- update/modify/edit 开头
    删除 -- delete 开头
    查询 -- list/query/search/find/get 开头
  • 页面命名:
    列表页面 -- 对象_list.jsp、模块_list.jsp、模块_main.jsp
    维护页面 -- 对象_edit.jsp、模块_edit.jsp
  • 数据库命名:IM_开头或IMCC_开头,具体项目业务表以业务开头,入CMB_;
  • 严禁使用数据库关键字、保留字作为字段名,建议2个或以上有意义英文以“_”分割;字段注释明确;
  • 数据库脚本统一命名:2018-08-08 营销相关.sql ,并可直接执行。

编码规范

  • 提交svn的代码,不允许有打印语句;
  • 所有java类中的提示需国际化;
  • 严禁使用硬编码;通用常量放置到框架常量类中com.szhtp.faq.common.global.GlobalConst.java,非通用常量放置在对应模块常量类中;
  • 一个方法不超过50行代码,包含注释;
  • 减少单个方法的复杂度,使用if、while、for、switch语句在10个以内;
  • 集合中的数据不使用时需要及时释放,特别是需要可重复使用的集合;
  • 日志需要清晰易懂,涉及到数据库操作的功能尽量打印日志,敏感信息不能明文(统一进行异常日志封装)
  • 明确方法功能,精确实现方法涉及;一个函数只做一个功能;
  • 数据库操作、IO操作等需要使用close()的对象,必须在finally中close();
  • 异常捕获后,如果不对异常进行处理,应记录日志或e.printStackTarce();自己抛出的异常必须要有详细的说明信息;
  • 修改Bug需要有完整的修改历史说明:包含修改人、修改时间、修改原因、修改记录;以及开始和结束,需要修改的代码不能删除,只能注释;
  • HQL语句一律写到DAO层中,且只能使用绑定变量;
  • 运营后台涉及到数据库修改操作的URI请求一律只接受POST,且方法头需要增加@Token注释,提交的请求需带上Token;
@Token
@RequestMapping(value = "/save", method = RequestMethod.POST)  
public ModelAndView updateEntity(@ModelAttribute("demoModel") @Valid DemoModel demo,BindingResult result) throws Exception
  • 涉及到数据权限的业务方法参数必须带有操作用户对象,且第一个参数必须是数据权限数据对象,最后一个参数是操作用户;入查询客户列表功能,在DAO层调用的方法参数:
public List<ImSmCustomer> listCustomers(ImSmCustomer customer, ImSmUser user);
  • 涉及到数据库操作的功能,必须启用事物;
  • 定义的接口参数尽量采用对象,而不是对象里的属性;
  • 复杂SQL语句,只能写到对应模块的hbm配置文件中;

注释规范

  • 源码注释量通常要达到30%,需准确、易懂、简洁;
  • 注释类:
/** 
  * 类使用简介
  *@(#)$CurrentFile *版权声明XXXXXX公司,版权所有违者必究* 
  *Company:XXXXXX公司   Copyright(c)2010
  *@author:
  *创建时间
  *@version1.0
  *修改编号:
  * 时间
  * 修改人
  *修改原因:
  *修改的方法:
*/
  • 方法注释
/**
  *一句话功能简介  
  *功能详细描述
  * @param children
  * @author 
  * @since 
*/
  • 类属性注释
/**
 * 注释内容
*/
  • 对变量的定义和分支语句(条件、循环)必须要有注释;
  • 边写代码边注释,修改代码同时修改注释,保证代码与注释一致性,不再使用的注释要删除;

数据库开发及安全规范

  • 敏感信息一律不得明文存储在数据库中,页面展示:身份证420***123;
  • 数据库串、账号、密码必须采用密文方式;
  • 严禁直接在SQL或HQL中写死条件(id=1),要数据绑定变量;
  • 在大表存在复杂的关联查询中,一定要检查SQL语句,避免全表查询;避免使用未建索引的列作为查询条件;
  • 涉及到数据量大的表需要分区,建立适合的分区索引而非全局索引;
  • 查询条件中严禁对列做函数处理,如:ABS(列名) > 500 、to_char(时间列,'yyyy-MM-dd')>'2015-07-14';
  • 尽量少使用导致全表扫描的关键字,如:like "%?%"、or、in、not in ;

页面规范

  • 输入框必须长度及内容控制,同时trim空格;
  • textarea 框需要明确提示可输入长度,并根据输入内容自动计算可输入长度及超过长度的截取;
  • 条件联动采用ajax方式,不能刷新页面;
  • 所有按钮提交涉及到数据变化的操作,需及时控制按钮可操作性(灰化按钮),提交完成后恢复按钮可操作;
  • 针对有疑问的字段维护时需要有tips提示功能;
  • 在进行有危险性的操作(删除、修改)之前,必须给予明确的警告、提示说明等;
  • 界面不能出现横向滚动条;
  • 维护界面统一屏蔽右键刷新;
  • JSP中js具有通用性的代码放置到common.js中引用;
  • 严禁页面js中包含${msg}方式;
  • 请求中严禁使用易猜测参数作为条件(http://***?id=1),需使用唯一code替换,最好是UUID这种无规则字符串;
  • 所有页面设计到提示的地方均采用国际化方式,使用spring:message标签,相关配置按照对应模块划分,配置文件路径:resources\i18n\local\messages_zh_CN.properties;
  • 界面统一相关操作名称、图标(如:编辑、删除、新增、详情)等等
<spring:message code="common.add"/>
<spring:message code="common.edit"/>
<spring:message code="common.delete"/>
<spring:message code="common.view"/>
<spring:message code="common.save"/>
<spring:message code="common.search"/>
  • JSP 页面不写CSS;
  • JSP页面不写Java代码;

其他

  • 项目统一采用UTF-8编码;
  • 必须采用面向接口的3层开发模式,业务层只能处理业务,数据层只能处理数据;
  • 新功能的开发一律需要先记录数据库脚本以及访问地址信息,提交SVN前对应脚本也要提交;
  • 数据库脚本中涉及到ID值使用:表序列.nextval 代替(Oracle写法);
  • 数据库脚本首行明确注明提交人和时间;若是数据库修改,需描述变更原因;
--------------------------------------------------------------------
---修改人信息
---原因备注
--------------------------------------------------------------------
  • 工具类统一放置到通用package的工具包下,如:com.szhtp.common.util.**;
  • 界面上字典、组织机构、来话原因等条件或text类型数据来源对应自定义标签;
  • 所有按钮、链接等涉及到服务端请求的操作需要加上自定义权限标签用于控制可见性!
  • jsp页面存放路径以package为单位;
  • 测试代码一律不准提交到SVN,特别是main函数;

定制项目

  1. SVN路径:https://192.168.1.142/svn/proj
  2. 新增各自项目文件夹,并在该文件夹下新增至少2个文件document、source,在source下新增trunk与branches,如图


web安全

  • XSS 跨站脚本攻击
    方案:客户端、服务端字段长度校验、过滤请求中的危险字符或者转义;在页面<script>标签中不能使用${msg}方式;
  • CRSF 跨站点伪造请求
    源于web的隐式身份验证机制,如:登录后打开一个危险网站
    方案:针对敏感请求采用Token进行验证;
    关键的提交请求表单使用图片验证码。
    注意:不能将Token放入到cookie,存在cookie被窃取的风险;
  • SQL注入
    方案:绑定变量
  • 文件上传漏洞
    文件上传的Web程序未对文件类型和格式做合法性校验,导致攻击者可以上传Webshell或者非期望格式的文件;
    方案:
    1)对上传文件的大小和类型进行校验,定义上传文件类型白名单;
    2)保存上传文件的目录不提供直接访问;
  • 安全参数
    严禁使用明文参数值,如id=123等;需采用无规则参数替换明文(数据库主键字段采用字符串方式)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容