# liferay-springboot-jwt **Repository Path**: wangyuyuan/liferay-springboot-jwt ## Basic Information - **Project Name**: liferay-springboot-jwt - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-08-21 - **Last Updated**: 2023-03-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # liferay-springboot-jwt #### 项目介绍 liferay+springboot+jwt #### 软件架构 此项目使用liferay作为底层server,实现对数据层的各种操作,使用springboot开发restful接口与前端进行通讯。 为什么要使用这种奇怪的架构?为什么不直接全部使用liferay或者springboot? 先说一下liferay与springboot的优势与劣势,liferay是一个非常强打的企业级框架,封装了很多非常有用易用的api,比如多项目多站点的支持 、跨站点的细粒度的权限控制、文件管理功能,但是也是有缺陷的,比如:对异常信息的处理非常不友好,后台抛异常也是返回200,而是在响应中告诉你抛了异常, 解决的方案是自己写filter插件,非常不方便。 调用接口的时候使用使用jsonws的方式,后台代码中无法直接接收复杂对象,只能接收到json字符串,需要手动处理转换成对象。 再说一下springboot的优势与劣势,springboot算是一个轻量级的框架,开发效率和开发质量都很完美,他可以完美解决liferay的痛点:jsonws和异常信息返回, 但是由于他很轻量级,liferay所特有的多项目多站的复杂权限管理他做不到,或者说不是很好做,真正自己动手做可能做到最后跟liferay很像。 为了功能不丢失和开发调试方便,我们把liferay与springboot结合使用了一下,虽然现在的处理方式也不是很优雅,但是比起只是用liferay的方式,已经方便了很多。 #### 环境 1. jdk:1.8+ 2. springboot:1.5.9 3. liferay:6.2.5 #### 实现功能 1. 实现了基本的增删改查的功能。 2. 使用jwt的方式进行权限认证,可自由控制接口的访问权限。 3. 对基本的异常信息做拦截,对可预见的异常返回特殊状态码,方便前后端联调,前端可以根据这些状态码呈现给客户友好的信息。 为什么我们要对异常信息拦截?到底有什么好处?对于服务器端的报错,如果不处理一般都是返回500给客户端,这样无论是后台导致的异常 还是客户不当操作造成的异常,无法做很好的区分。如果我们拦截一下可以预见的异常,返回前后端约定的http状态码,比如555,这样在用户操作没有权限的实体时, 后台返回555的http状态码,在响应中再返回一个业务的code比如101,当前端接收到555的http状态码时,就知道后台报了一个 可预见的错误,然后对相应中的code进行解析,可以翻译成很友好的信息给客户。 4. 使用swagger展示所有的接口文档,方便前后端联调。 #### 使用说明 1. 在根目录上做package,会打出来2个war包,一个viewpoint的包(liferay),一个viewpointrest(springboot) 2. 安装2个war包到liferay的tomcat中。 3. 由于tomcat没有做应用映射,所以所有的接口在调用的时候都是http://localhost:8080/viewpointrest开头 curl -i -H "Content-Type:application/json" -d '{"username":"test1","password":"test"}' 'http://localhost:8080/viewpointrest/user/login' curl -i 'http://localhost:8080/viewpointrest/api/no-check' curl -i 'http://localhost:8080/viewpointrest/api/security-exception'