




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HandEnterprise作者 12- 01- 版本 :Project拷贝号 文档控记录更日日作版2015-12-新NoPrevious2016-01-更 职位分拷贝 职位1234文档控 前 界面多语 概 Freemarker函 用户登 概 表设 保护策 ...................................................................................................................10登录逻 登录时序 权限过 概 相关 缓存权限数 Session管 SpringSession原 基于redis的session管 配置步 效果测 需要注意的问 数据多语 概 方 总 日志系 logback介 配置简 维度控 自动记录日 概UISpringLocaleMessageFreemarker在HAP中是通过基于 进中,每次请求服务端会根据信息获取到locale的值。Spring<propertyname="Name"value="myAppLocale<propertyname="MaxAge"没有取到的默认<bean<propertyname="paramName"value="lang"语言数据都是放在SYS_PROMPTS表中,系统启动后加载进redis缓存中的,因此定义com.hand.hap.i18n.CacheMessageSourceMtectedMessageFormatresolveCode(Stringcode,Localelocale){Promptpmt=promptService.getPrompt(code,locale);returncreateMessageFormat(pmt==null?code:pmt.getDescription(),}protectedStringresolveCodeWithoutArguments(Stringcode,Localelocale){Promptpmt=promptService.getPrompt(code,locale);returnpmt==null?code:}Spring<beanid="messageSource"ID可以不用指定,SpringFreemarker函SYS_PROMPTSLocaleMessage接口的实现,后端实现国Spring<beanid="freemarkerConfig"<property <property<propkey="auto_import">spring.ftlas<prop<prop<propspring.ftl中和相关的主要是以下几个函message是函数名,code ontext是freemarker上下文的一个对象(具体为Req ontext类). <@spring.messagemessage 概保护策(1)系统不保存明文 (3)MD5非对称加密算法用户为"111111",经过加盐后为"111111.infinitus".再根据加盐后的做MD5生成最终的值:"58F040E50AF0AE7A9CB1C06A35B388BD"保存在数据库。(1)管理类(2)MD5加密类<beanid="passwordManager"<propertyname="salt"4ORC的难度。登录逻根据调用LoginController中的login方判断是否正登录时序 概权限过滤的主要功能是判断当前登陆用户是否拥有特定功能的权限,防止没限的用户敏感数据。缓存权限数redisredis获取数据。器controller在器中根据当前登陆用户的角色以及的url地址,从缓存中相应的数据判断 Session在Web项目开发中,会话管理是一个很重要的部分,用于与用户相关的数据。通常是由符合session规范的容器来负责管理,也就是一旦容器关闭,重启会导致会session管理从容器中独立出来。而这实现方Tomcattomcat-redis-session-managerJettyjetty-session-redis等等。好处是对Tomcat8,或者说不太完善。项目中,对开发者来说也是个问题。Session管理和管理,在需要使用会话的时候都从自己的工具类中获取,而工具类后端可以放到Redis中。很显然这Session方案,很换了Servlet那一套会话管理,既不依赖容器,又不需要改动代码,并且是用了spring-data-redis那一套连接池,可以说是最完美的解决方案。当然,前提是项目要使用SpringFramework才行。SpringSession原spring-session是利用servletfilter-chain实现的。知道,每个servlet的请求,都filter-chainservletfilter的特性决定了:每个filter到的request,response对象都是经过前一个filter过滤过的,最终在servletrequest,response对象很可能已经不是最原始的值了,可能已经经过层层包装、之类的操作。spring-session需要在filter-chain的最前端,一个自己的filter,这个filter的作用就是,将原始的request,response对象通过Wrapper进行,同时重写getSession(boolean)sessionsession的逻辑替换为自springsession更具体一点,SessionRepositoryFilter就是上面提到的filter,这个类已经由spring-sessionsessionSessionRepositoysessionspring-session不仅可以将session换个地方,还可以进行操作,比方说控制session数量,多浏览器、多终端登录的时候可以达到特殊效果,自动踢出用基于redissession管HAPredissession信息。redis是一个高性能的缓存服务器,可以存比较幸运的是,并不需要去自己实现一个基于redis的SessionRepository,spring-session已经提供了一个实现:RedisOperationsSessionRepository。需要做的就是配置步spring-data-redismaven中添加<!--redis--<bean<propertyname="hostName"value="${redis.host}"<propertyname="port"value="${redis.port}"<propertyname="password"value="${redis.pass}"<propertyname="timeout"value="${redis.timeout}"<propertyname="poolConfig"ref="jedisPoolConfig"<propertyname="usePool"value="true"<beanid="redisTemplate"<propertyname="connectionFactory"ref="jedisConnectionFactory"<!—-redissession<beanname="redisOperationsSessionRepository"SessionRepositoryFiltersession<beanname="springSessionRepositoryFilter"spring-sessionbeanbean,用于相关操作,极大的filter中被调用到。然后是在web.xml中添加一个sessionfilter。需要注意的是这个filter需要放在filter<!--delegatingFilterProxy-- 这样便配置完毕了,需要注意的是,spring-sessionRedisServer2.8效果测 中的jsessionid已经替换为SESSION。:6379>keysredisGUI需要注意的问sessionredisjvm的内存,但这并不意味着可以肆无忌惮的向session中存放大量数据。因为数据在和写回的时候需要序列化、反session独立出来主要还是为了集群以及分布式环境的session共享问题,同时减少大量session长期占用的jvm内存。redisHA 概数据多语言是什么?简单的说就是一个东西用多种语言来描述语言属性。id,code这样的属性在任何语言环境中都保持一致,name,description则 方在结构上,HAP参考EBS的方案:采用TL表来专门多语言数据。如果一个表需要多语言支持(有若干个多语言字段)TL基表以及TL表名规则如下:TLTL,2)作为TL表的主键。(TL表全部都是联合主键基表中的每一行数据,在TL表都会有若干行不同语言的数据与之对应。方案确定以后,在看看如何在常规的增删改查中操作这些数据。以及HAPDTOTL数据的自动增删改(没有查)提供支持。TransactionConnection,基于这个Connection的后续操作将自动使用当前Transaction,因此可以保证对TL表的很显然,在执行时,应当首先基表数据,因为TL表所需要的主键值基本上都是在基表成功后才能得到。然后循环系统支持的语言,在TL表中若干条数据,多DTO@Table(name=publicclassRoleextendsBaseDTO@Column(name="role_id")privateIntegerroleId;@Column(name="role_name")privateStringroleName;@Column(name="role_desc")privateStringroleDesc;}继承@MultiLanguageDTO@TableDTORole数据多语言的一切信息。我TLTLTL有了这些信息框架就可以基表数据操作在成功以后自动生成一段语句,向TL表中数据TLselectselectb.role_id,b.role_code,t.role_name,t.role_descfromsys_role_bbleftouterjoinsys_role_tlon(b.role_id=t.role_idandt.source_lang='en')whereb.role_id=3使用左外连接TLnull返回。查询结果中,普通字段来自基表,多语言字段来自TL表。updateinsertSQL同时,在更新TL表数据时,应该只更新与当前语言相匹配的记录,会有一个获取当前语言环境的步骤。这点与不同,不关心当前语言环境,只关心系统支持哪些语言。是这种操作,则无法自动删除多语言数据,需要手动写删除SQL语句。TLWHERE条件,并不会使用语言环境这个字段。基表数据删除时,与之对应的所有TL表数据都应该删除。总框架对数据多语言的自动化有一定的支持,在基本数据时可以不用关心TL表。但在比较个性化的操作用,仍然需要开发者写相应的SQL来满足需求。 务,对于调试、程序状态记录、数据恢复都有非常现实的意义。HAPAPISLF4J在底层默认采用logback,并不是广为人知的log4j。下面将逐步介绍HAP如何使用logback来打造高度灵活的日志系统,来满足不同场景的需求。logback介Logbacklog4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-classiclog4jlogback-classic完整实现SLF4JAPI使你可以很方便地更换成其它日志系统如log4j或JDK14Logging。logback-access模块与Servlet容器集成提供通过Http来日志的功能。log4j,logbackslf4jlogback-classic作为底层实现时,涉及的SLF4J的问题完全不,I/O错误恢复,FileAppenderRollingFileAppenderI/O错误中恢复。比如文件服务器临时宕机不需要重启应用,日志功能就能恢复正常。当文件服务器恢复工作,logbackappender就会透明地和快速的从上一个错,。更丰富的过滤器可以从多个自定义维度来控制日志的级别而不必。配置简maven 其中,jainoJaninoEventEvaluator引擎(java表达式求值引擎)<configuration<configurationscan="true"scanPeriod="3<appendername="STDOUT"<pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}%-5level[%X{userId}][%X{requestId}]%logger-%msg%n</pattern><root<appender-refref="STDOUT"<loggername="com.hand.hap"level="DEBUG"<appender-refref="STDOUT"<loggername="com.lkkhpg.dsis.admin"level="DEBUG"<appender-refref="STDOUT"logbacklogbackappender是真正用来输出日志的终端。可以有很多实现,控制台、文件、数据库等多重实现。这与log4j类似。也可以向输出日志。rootloggerloggerlogger和root都可以若干个appender来输出自己范围内的日志configurationscanlogback自动重载配置文件,在%-5level[%X{sessionId}]%logger-MDC(MappedDiagnosticContext),他可以应用程序上下文信息以便在log中使用。了上下文信息以后,在log配置的pattern中就可以使用%X{someKey}来输出:%-5level[%X{sessionId}]%logger-,HAP框架在Spring器中对Controller进行在代码执行之前可以获取上面这几个维度的值,并存放到MDC中(MDC采用ThreadLocal来数据)。接下来的日志输出就可以都使用到MDC中的值。有了这些值以后就可以来根据维度控制日,维度控利用logback
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司植树节亲子活动方案
- 公司生日感恩策划方案
- 公司烧烤娱乐活动方案
- 城市交通规划与管理的2025年考核试卷及答案
- 2025年心理健康教育课程期末考试试题及答案
- 2025年农村经济与管理综合能力考试卷及答案
- 2025年金融从业资格证考试试题及答案
- 2025年非营利组织管理师职业资格考试试卷及答案
- 保卫科上半年工作总结精彩文章
- 2024年度浙江省护师类之主管护师真题练习试卷A卷附答案
- 光伏电站项目工程资料清单
- YY/T 0003-1990病床
- GB/T 22894-2008纸和纸板加速老化在80 ℃和65%相对湿度条件下的湿热处理
- GB/T 16630-2012冷冻机油
- GB/T 12242-2005压力释放装置性能试验规范
- 第四章-食用香精的应用
- 课程替代申请表(模板)
- 浪琴环球马术冠军赛上海站官方赞助商合作方案课件
- 医疗器械临床评价课件
- 现场工程量确认单
- 2022年广东省佛山市顺德区承德小学小升初数学试卷
评论
0/150
提交评论