门户安全管理(ssh+jpa)

Spring常用注解

Spring中的注解大概可以分为两大类:
1、spring的bean容器相关的注解,或者说bean工厂相关的注解。
spring的bean容器相关的注解,先后有:@Required, @Autowired, @PostConstruct, @PreDestory,还有Spring3.0开始支持的JSR-330标准javax.inject.*中的注解(@Inject, @Named, @Qualifier, @Provider, @Scope, @Singleton)
2、springmvc相关的注解。
springmvc相关的注解有:@Controller, @RequestMapping, @RequestParam, @ResponseBody等等。

  • @Component :可以注解其他类注解(带有此注解的类看作组件、当使用基于此注解的配置和类路径扫描时,这些类会被实例化)把普通的pojo实例化到Spring容器中。不属于归类(@Controller、@Services等)可用该注解标注。

  • @Resource:实现依赖注入(name(解析为bean名字)、type(解析为bean类型))默认使用byName自动注入

  • @Override 提示编译器(必须和Override父类或者java.lang.Object中一个方法同名)为我验证方法名、验证重写的方法名正确性、也可以当注解用

  • @Autowired:自动注入

  • @Service: 为实例化后的对象取个名字(一般用于Service层)

  • @JsonIgnoreProperties: 类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

  • @Repostory: @Repository用于标注数据访问组件,即DAO组件

  • @Transactional: 是声明式事务管理 编程中使用的注解
    Interface接口中的注解:

  • @Path:描述跟资源、子资源方法或子资源位置(@Path("/queryById"))

  • @Produces:转换返回数据格式(返回的内容类型)

  • @Consumes:处理清的提交内容类型,与上者相反

  • @Context、@WebParam、@QueryParam、@QueryParam

  • **@Controller:**控制器(注入服务)

  • @RequestMapping: 当所有的方法都将映射为相对于类级别的请求,表示该控制器处理的所有的请求都将被映射到value属性指示的路径下,例:@RequestMapping("/config")

  • @RequstBody: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

  • @PathVariable: 映射URL绑定的占位符。例:
    在这里插入图片描述

  • **@service:**服务(注入dao)

  • @repository:(实现dao访问)

doc数据库表及一些SQL文件

bonc-portal-core门户模块

pojo、javaBean、Entity区别:
1、javaBean(表示层):JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。更多的是一种规范,即包含一组set和get方法的java对象。

2、pojo:POJO在持久层的体现,对POJO持久化后就成了PO。PO更多的是跟数据库设计层面相关,一般PO与数据表对应,一个PO就是对应数据表的一条记录。
简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。一般在web应用程序中建立一个数据库的映射对象时,我们只能称他为POJO。理想的讲,一个POJO是一个不受任何限制的java对象。
与javaBean相比,javaBean则复杂很多,JavaBean是可复用的组件,对JavaBean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于JavaBean是被容器创建的,所以JavaBean应具有一个无参的构造器。

3、entity(业务层):实体bean,一般是用于ORM对象关系映射,一个实体映射成一张表,一般无业务逻辑代码。
负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个EntityBean对象相当于创建一条记录,删除一个EntityBean对象会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。
Java中DAO层、Service层和Controller层的区别
总结:
个人理解DAO面向表,Service面向业务。后端开发时先数据库设计出所有表,然后对每一张表设计出DAO层,然后根据具体的业务逻辑进一步封装DAO层成一个Service层,对外提供成一个服务。

1、DAO层:
DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。

2、Service层:
Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事物控制。

3、Controler层:
Controler负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。

src.java.com.bonc.portal

  • bean(实体类–表示层)
    BaseBean:(作为父类,被继承BaseBean)pageInfo(分页显示)、idList(id列表)、objectList(目标列表)
    MessageBean:(继承BaseBean)Message(公告)、userList(用户列表)
    MessageLoginIdBean:(继承BaseBean)messageLoginId
    OnlineUserBean:userLoginLog
    OnlineUserInfoBean:menuName(菜单名称)、tenantId(租户id)、moduleMenuId(归属模块(一级)菜单ID)、moduleMenuName(归属模块(一级)菜单名称)
    PortalLayoutBean(门户布局):portalLayout
    PortalMenuClickLogBean:(菜单点击日志)PortalMenuClickLog
    PortalMenuIconBean:(门户菜单图标)portalMenuIcon
    PortalMenuinfoBean:(门户菜单信息)menuinfo
    PortalPageBean:(门户分页)portalPage
    PortalPortletBean:()portalPortlet、eventIds(事件)、eventNames(事件名字)
    PortalPortletConfigBean:(上一个配置)portalPortletConfig
    PortalPortletConfigInstanceBean:(配置实例)portalPortletConfigInstance
    PortalPortletInstanceBean:portalPortletInstance(例子)
    PortalPortletThemeBean:(主题)portalPortletTheme
    PortalPortletTypeBean:(类型)portalPortletType、eventIds、eventNames
    PortalThemeBean:(门户主题)portalThemeBean
    PortletEventBean:(门户事件)portletEventBean
    ResultInfo:(统一返回结果)success(结果 boolean类型)、message(信息)、params(参数)

    • dao(数据访问层,具体到对于某个表的增删改查 DaoImpl中有sql语句)
      在这里插入图片描述

    IBaseDao(作为父类,被继承):saveOrUpdate(保存或更新、两个,参数(entity)不同)、delete(通过id删除)、deleteByCollection(根据集合删除)、findById、loadAll、findList(两个,参数(pageInfo页面信息、criterion(负载))不同)
    IMenuinfoDao:findMenuinfos(查找菜单信息)、findAllMenus(查找全部菜单)、findMenusByIdAndIsDisable(查找菜单通过id并且isDisable为0或者isDisable 为空–使用hql(HQL是Hibernate Query Language的缩写,是一种面向对象的查询语言,类似于SQL,但不是针对表和列进行操作,而是针对对象和属性.))、findAllMenusBySql(通过sql语句进行查询菜单)、findMenusToEidt(通过???查找菜单)、findMenusByParent(通过???查找菜单)、findMenusByCode(通过编码查找菜单,两个方法,不同参数(菜单编码、菜单id))、updateMenuId(更新菜单id)、findMunuByProperty(通过???查找菜单)、updateMenuinfoByMenuinfoTypeId(更新菜单信息通过菜单类型id)、findMenuList(查找菜单列表)、findMenusByMenuCode(查找菜单通过菜单编码)
    IMessageByLoginIdDao:(查找信息、删除)findListByLoginId(通过登录id)、findListByLoginIdAndMessageId(通过登录id和信息id)、deleteMessageUserRel(通过登录id、信息id)
    IMessageDao:selCountByNoReadMsg(查询未读消息条数)、selCountByNoReadMsg(查询未读消息列表)、selCountMessage(查询消息条数)、modifyStatusAll(批量 修改消息已读状态)、modifyStatusAsNoReadAll(批量 修改消息未读状态)、delMsgByArray(批量 删除消息)、modifyStatus(单条修改状态)、selNoDeleteMessageList(查询未被删除消息列表)、selNoDeleteMessageCount(查询未被删除消息条数)、selNextNoReadMessage(查询下几条未读消息)、sendMessage(发送消息)、selAlreadySendMessage(查询已发送消息)、selAlreadySendMessageCount(查询已发送消息条数)、updateMessage(修改消息)、selMsgForRight(收件箱动态查询)、selMsgForRightCount(收件箱动态查询个数)、selMsgForSend(已发送动态查询)、(selMsgForSendCount)收件箱动态查询个数、selNextMessageList(查询有效的)、findMessagesList(管理员查询公告信息)、findMessagesCount(查询系统公告总条数)
    IOnlineUserInfoDao:queryOnlineUserInfo(查询登录日志信息)、queryLastLogoutTime(获取退出后的最近一次登录时间)
    IPortalFileDao:findFileByName(听过名字查找文件)
    IPortalLayoutDao:getId(根据布局器内容获取布局器id)、getPortalLayout(根据布局器类型获取布局器)、findLayout、findLayoutDefault
    IPortalMenuClickLogDao:querySumList(按菜单分组分页查询菜单点击统计)、querySumListDetail(按租户和菜单分组分页查询菜单点击统计)、queryUserClickLog(根据条件分组分页查询操作信息)
    IPortalMenuIconDao: findIcons(查找图标)
    IPortalMenuinfoTypeDao: findMenuinfoTypeByCode(查找菜单信息类型通过编码)
    IPortalPageDao: getId(根据页面编码和名称获取页面id)、getPortalPage(根据页面编码获取portalPage)、updatePortalPageByThemeId(更新门户分页信息通过主题id)、findPortalPageByCode(查找门户信息通过编码)
    IPortalPageExtDao: findByCode(根据code查询页面信息)、findPagesByCode(查出code为“code”的所有页面信息)
    IPortalPortletDao: updatePortletByPortletTypeId(更新门户通过门户类型id)、findPortalPortletByCode(查找门户通过编码)
    **IPortalPortletConfigInstanceDao: ** findByPorletId(通过用户id查找配置实例)、findByPortalPorletConfigId(通过用户配置id查找配置实例)、updateConfigInstanceByConfigId(通过配置id跟新配置信息)、updateConfigInstanceByInstanceId(通过实例id跟新配置信息)
    IPortalPortletConfigDao: findByPorletId、findByPropCode、findOneByPropcode、updatePortletConfigByPortletId
    IPortalPortletInstanceDao: findPortalPortletInstanceByPageId(通过页面id查找查找门户实例)、updatePortletInstanceByThemeId(通过主题id更新门户实例)、updatePortletInstanceByPortletId(通过PortletId更新门户实例)、updatePortletInstanceByPageId(通过页面id更新门户实例)
    IPortalThemeDao: findThemeByCode(查找主题通过密码)、findThemeByThemeType(查找主题通过主题类型)
    IPortletEventDao: deletePortletEventRel(删除门户事件)、findEventByPortletIdAndCode(通过门户组件id和密码查找事件)

  • entity(实体类–业务层–对数据库表的操作)
    PageInfo(分页实体类): pageSize(分页大小)、totalPages(总页数 —计算 (this.totalCounts - 1) / this.pageSize + 1))、currentPage(当前页)、totalCounts(记录总条数)、firstResult(当前页开始显示记录数(limit第一个参数)(currentPage - 1) * pageSize)、sortType(排序类型(ASC(升序)、DESC(降序)))、sortAttribute(排序属性)、querys(精确匹配and)、matchMaps(模糊匹配or)
    DbConnection(连接属性): dataurl、datausername、datapassword
    Message(信息实体类): id、msgTitie、msgStatus(0/1)、msgSender(发件人)、msgCotent(信息内容)、startTime、endTime、timeSpan(时间跨度)、isEnable(是否确认)、msgReceiver(信息接收人)、msgPosition(邮件保存位置 0为接收者,1为发送者)、msgPosition(信息类型0为公告信息,1为私信信息)、name、receiverName(接收者姓名)、nextMessageTitle(下一个信息标题)、nextId(下一个信息id)、receiveType(接收类型)、encodeId(编码id)
    .hbm.xml: 文件配置,Hibernate的核心就是对象关系映射,对象和关系型数据库之间的映射通常使用XML文档来实现。
    主体框架

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping 可指明JavaBean所在包的全路径,例如---package="com.bonc.portal.entity.Message",与class 中那么功能一致,二选一>

    <class name="类名"(可指明JavaBean所在包的全路径,例如---name="com.bonc.portal.entity.Message") table="表名">
    	//主键
        <id name="属性(数据库中主键在JavaBean中的属性名称)" type="JavaBean中主键对象的类型属性类型">
            <column name="数据库中表的字段名"/>
            <generator class="主键映射方式"/>
	            hibernate中主键映射方式:
				assigned:外部程序对id赋值
				native:由数据库对id赋值
				identity:采用数据库提供的主键生成机制
				increment:主键按照数值顺序递增
				sequence:采用数据库提供的sequence机制生成主键
				foreign:使用外部表的字段作为主键
        </id>
        //表中字段映射
        <property name="属性(数据库字段在JavaBean中属性名称)" type="属性类型">
            <column name="数据库中真实字段,与JavaBean一一对应"/>
        </property>
        
        <!-- One-To-Many attributes -->
		<!-- Many-To-One attributes -->
		<!-- Many-To-Many attributes -->
        //一对多关系:用在一个表与另一个表存在外键关联的时候,例如:一为组织表,多为用户表(一个组织包含多个用户,一个用户只能隶属于一个组织),“一”方要在映射文件中添加:
		<set name="java映射类中对应的属性(JavaBean)" inverse="true" lazy="true">
    		<key column="表中对应字段"/>
    		//一对多:
     		<one-to-many class="多方的类(com.bonc.portal.entity.MessageFile)"/>
     		//多对一:
     		<many-to-one name="java映射类中对应的属性" column="表中对应字段" class="类名" not-null="true" />
     		//一对一
     		<!-- 其中主表的配置 -->
			<one-to-one name="主表对象中子表对象的属性名" class="子表对象的类名"cascade="save-update"/>
			<!-- 子表的配置 -->
			<one-to-one name="子表对象中主表对象的属性名" class="主表对象的类名" constrained="true" />
			//多对多
			<many-to-many class="另一个表的对象类" column="另一个表的字段"/>

		</set>
    </class>
</hibernate-mapping>  

Message.hbm.xml(例):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.bonc.portal.entity.Message" table="PORTAL_MESSAGE">
        <id name="id" column="ID" type="java.lang.Long">
            <generator class="native"/>
        </id>
		<property name="msgTitle" type="java.lang.String">
            <column name="MSG_TITLE" length="50" not-null="false" unique="false"/>
        </property>
        <property name="receiveType" type="java.lang.Integer">
            <column name="RECEIVE_TYPE" length="2" not-null="false" unique="false"></column>
        </property>
		<!-- One-To-Many attributes -->
		<!-- Many-To-One attributes -->
		<!-- Many-To-Many attributes -->
        <set name="messageFiles" table="PORTAL_MESSAGE_FILE_REL"  lazy="false" cascade="none" inverse="false" >  
            <key column="MESSAGE_ID"/>
            <many-to-many class="com.bonc.portal.entity.MessageFile" column="MESSAGE_FILE_ID"/>  
        </set>  
    </class>
</hibernate-mapping>

MessageByLoginId(根据登录id的信息): id、loginId、messageId、readTime
MessageFile(信息文件): id、filePath(文件路径)、fileName、createDate
OnlineUserInfoHistory(在线的用户信息记录): id、appCode(app密码)、clientip(客户ip)、clientType、loginId、loginTime(登陆时间)、logoutTime(退出时间)、tenantId(租户id)
PortalFile(门户文件): id、fileName(文件名字)、saveName(保存名)、uploadDate(下载时间)
**PortalLayout(门户布局): ** isDefault(0/1)、layoutName(布局名称)、layoutTemplet(布局模板)、layoutData、id
PortalMenuClickLog:(菜单点击日志) id、menuId、menuCode(菜单编码)、menuUrl(菜单url)、menuName(菜单名称)、groupMenuId(归属分组(二级)菜单ID)、groupMenuName(归属分组(二级)菜单名称)、moduleMenuId(归属模块(一级)菜单ID)、moduleMenuName(归属模块(一级)菜单名称)、userId(用户id)、userLoginId(用户登录名 )、creatDate
PortalMenuIcon(用户菜单图标): id、iconCode(图标密码)
PortalMenuinfo:(用户菜单信息)
在这里插入图片描述
PortalMenuinfoType(门户菜单信息类型): menuinfoTypeName(菜单信息类型名称)、menuTypeCode(菜单类型码)、id
PortalPage(门户页面): id、pageName、description(描述)、org、role(角色)、code(码)、user、clientType(客户类型)
PortalMenuinfoType(门户菜单信息类型):
PortalTheme: id、description(描述)、themeName(主题名字)、themeType(默认为0,0代表门户主题,1代表页面主题)、themeFilePath(主题文件路径)

  • factory
    **SpringWiredBean: ** (自动装配注解会让Spring通过类型匹配为beanFactory注入示例)getBeanById(实例方法,使用的时候先通过getInstance方法获取实例)

  • service(服务层对一个或多个dao进行再次封装,封装成一个服务需要事务控制)

  • util
    ClassUtil: DeepClone(克隆对象)
    ConstantUtil:
    MessageTimeUtil: setTimeSpan(循环消息列表)

bonc-security-core安全模块

src.java.com.bonc.security

  • api
  • bean(实体类–表示层)
  • client
  • common
  • dao(数据访问层,具体到对于某个表的增删改查)
  • entity(实体类–业务层–对数据库表的操作)
  • factory
  • listener
  • service(服务层对一个或多个dao进行再次封装,封装成一个服务需要事务控制)
  • util

cas 登录模块

security安全模块

1、 src-main-java(com.bonc.security 处理后端逻辑)
integration.accountCenter

  • api
    AccountRestApiImpl:syncDo(新增用户、添加用户、修改用户、删除用户)
  • utils
    ResultMessage(api统一返回值类):code、msg、data
    ResultCode(接口状态码):
/* 成功状态码 */
    SUCCESS(1, "成功"),

    /* 参数错误:10001-19999 */
    PARAM_IS_INVALID(10001, "参数无效"),
    PARAM_IS_BLANK(10002, "参数为空"),
    PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"),
    PARAM_NOT_COMPLETE(10004, "参数缺失"),

    /* 用户错误:20001-29999*/
    USER_NOT_LOGGED_IN(20001, "用户未登录"),
    USER_LOGIN_ERROR(20002, "账号不存在或密码错误"),
    USER_ACCOUNT_FORBIDDEN(20003, "账号已被禁用"),
    USER_NOT_EXIST(20004, "用户不存在"),
    USER_HAS_EXISTED(20005, "用户已存在"),

    /* 业务错误:30001-39999 */
    SPECIFIED_QUESTIONED_USER_NOT_EXIST(30001, "某业务出现问题"),

    /* 系统错误:40001-49999 */
    SYSTEM_INNER_ERROR(40001, "系统繁忙,请稍后重试"),

    /* 数据错误:50001-599999 */
    RESULE_DATA_NONE(50001, "数据未找到"),
    DATA_IS_WRONG(50002, "数据有误"),
    DATA_ALREADY_EXISTED(50003, "数据已存在"),
    DATA_HAS_BEEN_DELETED(50004,"数据已被删除"),

    /* 接口错误:60001-69999 */
    INTERFACE_INNER_INVOKE_ERROR(60001, "内部系统接口调用异常"),
    INTERFACE_OUTTER_INVOKE_ERROR(60002, "外部系统接口调用异常"),
    INTERFACE_FORBID_VISIT(60003, "该接口禁止访问"),
    INTERFACE_ADDRESS_INVALID(60004, "接口地址无效"),
    INTERFACE_REQUEST_TIMEOUT(60005, "接口请求超时"),
    INTERFACE_EXCEED_LOAD(60006, "接口负载过高"),

    /* 权限错误:70001-79999 */
    PERMISSION_NO_ACCESS(70001, "无访问权限"),

    /*租户错误: 80001-89999*/
    TENANT_IS_INVALID(80001,"无效租户");
  • cloudiip
    CloudiipService(集成cloudiip用户中心):receiveDataFromCloudiip(根据kafka获得消息保存入库)
    CloudiipSyncBody(cloudiip用户实体类)
    2、 src-main-java-web(前端页面jsp):有一些什么功能

portal门户模块

1、 src-main-java(com.bonc 处理后端逻辑)
portal

  • api
    impl
    BaseApiImpl抽象类(queryById通过id查询、queryAll、queryList)
    MenuinfoApi(@Commpontent)继承BaseApiImpl实现ImenuinfoApi接口:IMenuinfoService(@Resource(name = “menuinfoService”))、IBaseService父类方法、findParentMenu和findMenuinfos(根据菜单名称、菜单编码查询 菜单)
    MessageApiImpl(@Commpontent)继承BaseApiIMpl实现ImessageApi:ImessageService(@Resource(name = “messageService”))name自动依赖注入、IBaseService父类方法、、queryMsgInfo方法(创建消息列表、从数据库中查询未读消息列表、获取未读消息条数、创建消息时间设置工具、设置未读消息列表的时间差、创建JSON数组对象 、消息大于十条只读取十条(创建JSON对象,发送到前台))、alreadyRead(通过id找到message,设置状态为1更新message)、sendMessage(发送公告)、privateSendMessage(发送私人公告,request无法获取用户,通过参数传递参数)
    PortalLayoutApiImpl(@Component)继承BaseApiImpl实现IportalLayoutApi:portalLayoutService(@Resourse 通过name依赖注入)、IBaseService父类方法、findPortalPages(通过Id获取PortalPages)
    PortalLayoutApiImpl:findPortalPages
    PortalPageApiImpl:findLayout(布局)、findTheme(主题)
    PortalPortletApiImpl:findSubscriptionEvent、findPortalPortletInstances、findPortletEvents、findPortalPortletConfigs
    PortalPortletConfigApiImpl:findPortlet、findPortalPortletConfigInstances
    PortalPortletConfigInstanceApiImpl:findPortlet、findConfigProp
    PortalPortletThemeApiImpl:findPortalPortletInstances
    PortalThemeApiImpl:findPortalPages
    PortletEventApiImpl:findPortlet、findPortalPortlets
    RestApiImpl:findAllMenus、findMenusByParent、querySysPropertyAtPortletConfig、saveHomePageAtPortletConfig、findMenuByCode、findMenuByProperty、menuSaveOrUpdate、menuDelete(删除菜单)、initPage(添加页面、取默认布局器)、deletePage(删除页面)、setHomePageAtPortletConfig、findMenus(查找菜单)、changeSecretKey(更新密钥)、setHomePage(设置主页面)、queryMessage(查询公告)、updateMsgStatus(更新消息已读/未读公告状态)、getRole(获取角色)

  • util
    util-designer
    Designer:实体类
    DesignerVo:Designer实体类
    LoadPropertiesUtil:selectProperty、setProperties、getProperties
    TestCurl:doGet、main
    util
    BasicApplication:getClasses、getSingletons
    ChangeDataUtil:change(解密key、获取数据库连接信息、将数据库连接信息解密)、getNewDbConnection(解密secretKey、对数据库连接信息加密)、WriteDb(将加密后的数据库连接信息密文写入配置文件中)
    ChangeSecretKeyUtil:getProperties(获取Properties对象)、setValue(新增/修改数据)
    DESUtil:(通过三重DES算法,加密或解密数据)encrypt(加密)、decrypt(解密)、decrypt(DES数据解密)、encrypt(DES数据加密,使用默认的key)、encrypt(DES数据加密,参数不同)、byte2hex(二进制转字符串)
    FileOprateUtil:( ZIP压缩文件操作工具类 支持密码)、delDirOrFile(删除文件)、unZipFiles(解压文件到指定目录)、imageToBase64(图片转BASE64)、base64ToImage(BASE转图片)、saveFileToPath(保存文件到指定路径)、getFileType(根据文件路径获取文件的文件头)
    HtmlUtil:delHTMLTag(删除Html标签)、getTextFromHtml(过滤操作 )
    HttpRequestDeviceUtils:(判定web请求的终端设备是手机吗)isMobileDevice(根据当前请求的特征,判断该请求是否来自手机终端,主要检测特殊的头信息,以及user-Agent这个header )、isIPadDevice(判断是否是Ipad 登录)
    MyMenuinfoComparator:(菜单表比较器)
    PatternTest:main(按照指定模式在字符串中查找)
    PortletInitUtil:getTenantData(布局器初始化、主题初始化、页面初始化、组件主题初始化、获取配置文件路径、获取内容)、initWeather(门户组件初始化)、initCurrentUser(当前用户组件)、initCustomization(个性化定制组件)、initOnlineUser(在线用户组件)、initMessage(消息组件)、initHorizMenu(横向菜单组件)、initWorkspace(工作区间组件)、initTitleAndLogo(标题和和logo组件)、initColumMenu(列式菜单组件)、initPosition(地区组件)、queryIndex(查询数组中某一个元素的索引值)
    QueryAnnounceUtil:(查询宣告)
    ServletUtil:joinUriAndParms、getForwardRequestURI、getServletPath、getRequestValue、sendAsJson、sendAsText
    TestUnicom:main(测试连通性)、ping(返回值为boolean,ture说明host是可用的,false为不可用)
    Utils:getStringValue(根据key读取value)
    WebClientUtil:baseRequest(rest方式获取网络资源)

  • vo实体类
    OnlineUserInfoVO:id(主键)、orderId(序号、数据库动态生成)、loginId(租户登录id)、username(登录用户)、appCode(登陆方式)、clientip(用户IP)、loginTime(登陆时间)、tenantId(登录id)、tenantId(租户id)
    PortalMenuClickLogSumVO:menuCode(菜单编码)、menuName(菜单名称)、groupName(归属分组名称)、moduleName(归属模块名称)、clickSum(点击次数)、clickProportion(点击占比)、tenantName(租户名称)
    PortalMenuClickLogVO:id、orderId(序号、数据库动态生成)、createDate(创建时间)、menuName(菜单名称)、moduleMenuName(模块菜单名称)、groupMenuName(组菜单名称)
    PortletInstanceVO:portletName(组件名)、portletThemeId,portletId(组件id)、height,width(实例height,width)、portalLayoutData(布局器layoutType)、isFloat(是否悬浮)、id,name(实例id、name)、sizeStatus(大小状态:最小,最大,普通)、integrateMethod(集成方式)、layoutData(布局定位数据)、viewUrl(查看地址)、maxUrl(最大化界面地址)、configUrl(配置界面地址)、icon(图标文件)、theme(主题风格)、code(组件编码)、registeEvents(注册的事件名称)、subscriptEvents(订阅的事件名称列表)、propertyValues(可配置属性的值集合)

  • web
    action
    filter
    PortalTempletFilter实现Filter接口(处理url请示,读取真实的文件流,发到客户端)
    listener
    servlet
    PortalServlet( * PortalServlet作用为拦截 *.page请求,取得页面的编码,然后到库里加载页面配置信息,然后再结合主题布局等模板, 最终縇染出html页面)
    DecryptPropertyPlaceholderConfigurer:(配置文件数据源加密)
    2、 src-webapp-WEB-INF(前端页面jsp):有一些什么功能

主要去看bonc-portal-core、bonc-security-core,需讲解有那儿写模块名,是干什么的,有什么功能,用了什么技术

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Spring Boot是一个用于构建独立的、基于生产级别的Spring应用程序的框架。它简化了基于Spring的应用程序的开发过程,并提供了许多开箱即用的功能和特性。 JPA(Java Persistence API)是一套基于对象-关系映射的API规范,它提供了一种方便、统一的方式来访问和管理数据库。通过JPA,我们可以通过编写简单的POJO(Plain Old Java Object)类来表示数据库中的表,并使用JPA提供的注解来进行数据库操作。 ShardingSphere是一个基于Java的开源分布式数据库中间件,它提供了在分片环境下进行数据分片和数据分布式访问的解决方案。ShardingSphere支持多种数据库,如MySQL、Oracle、PostgreSQL等,并且能够提供高性能、高可用性的数据访问服务。 结合Spring Boot和JPA,我们可以很方便地使用JPA来进行数据库操作,并且可以利用Spring Boot的自动配置特性来简化配置。而使用ShardingSphere,我们可以轻松实现数据的分片和分布式访问,从而提高数据库的性能和可扩展性。 在使用Spring Boot集成JPA和ShardingSphere时,我们可以先配置数据源和JPA的相关属性,然后使用JPA的注解来定义实体类和数据库操作方法。在需要进行分片的情况下,我们可以使用ShardingSphere的配置来定义分片规则,并且在编写DAO层时利用ShardingSphere的API来进行数据访问操作。 综上所述,Spring Boot、JPA和ShardingSphere是一套完整的技术栈,可以帮助我们快速构建、开发和管理分布式的、高性能的应用程序。这些技术的结合为我们提供了便捷和高效的方式来处理数据库相关的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值