Commit f92d4358 by naan1993

Merge branch 'master' into dev

parents 23440935 a41c71f4
...@@ -30,7 +30,7 @@ Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模 ...@@ -30,7 +30,7 @@ Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模
7. 修复添加一级菜单不生效的问题 7. 修复添加一级菜单不生效的问题
### 如果不喜欢SpringBoot? ### 如果不喜欢SpringBoot?
如果您不喜欢用SpringBoot,或者您是一个spring初学者,您可以切换到[Guns V1.0(点击这里)](http://git.oschina.net/naan1993/guns/tree/v1.0/)分支, 如果您不喜欢用SpringBoot,或者您是一个spring初学者,您可以切换到***[Guns V1.0(点击这里)](http://git.oschina.net/naan1993/guns/tree/v1.0/)***分支,
Guns V1.0基于spring的java bean方式配置项目,同样简洁易上手. Guns V1.0基于spring的java bean方式配置项目,同样简洁易上手.
注:SpringBoot强大的Auto Config和统一的依赖管理极大的简化了spring配置和maven依赖,在不了解其都配置了哪些东西的基础上可能会对初学者有一定困扰,所以建议初学者先看Guns V1.0 注:SpringBoot强大的Auto Config和统一的依赖管理极大的简化了spring配置和maven依赖,在不了解其都配置了哪些东西的基础上可能会对初学者有一定困扰,所以建议初学者先看Guns V1.0
...@@ -51,7 +51,7 @@ Guns V1.0基于spring的java bean方式配置项目,同样简洁易上手. ...@@ -51,7 +51,7 @@ Guns V1.0基于spring的java bean方式配置项目,同样简洁易上手.
1. 导入sql/guns.sql文件到mysql数据库 1. 导入sql/guns.sql文件到mysql数据库
2. 以maven方式导入项目到ide 2. 以maven方式导入项目到ide
3. 修改application.yml中的数据库相关的配置,改为您本机的数据库配置 3. 修改application.yml中的数据库相关的配置,改为您本机的数据库配置
4. 启动项目,管理员账号admin/密码111111 4. 启动项目,管理员***账号admin/密码111111***
### 如何启动项目 ### 如何启动项目
Guns目前支持三种启动方式: Guns目前支持三种启动方式:
...@@ -75,7 +75,7 @@ java -jar guns-1.0.0-SNAPSHOT.jar ...@@ -75,7 +75,7 @@ java -jar guns-1.0.0-SNAPSHOT.jar
并打包放入到tomcat中执行 并打包放入到tomcat中执行
### 注意 ### 注意
建议本项目用jdk1.8,经测试jdk1.7登录页面会导致css丢失 最新版项目最低支持jdk1.7
## 所用框架 ## 所用框架
### 前端 ### 前端
......
# 多机环境部署注意事项 # 多机环境部署注意事项
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
多机环境把session托管给redis存储,所以要部署和配置redis,另外需要注意的是开启相关配置 多机环境把session托管给redis存储,所以要部署和配置redis,另外需要注意的是开启相关配置
## 注意事项如下 ## 注意事项如下
1.单机环境下不需要依赖spring-session,所以需要把相关依赖改为compoile 1.单机环境下不需要依赖spring-session,所以需要把相关依赖的注释打开
``` ```
<dependency> <dependency>
<groupId>org.springframework.session</groupId> <groupId>org.springframework.session</groupId>
...@@ -20,4 +20,9 @@ spring.redis.host=xxx ...@@ -20,4 +20,9 @@ spring.redis.host=xxx
spring.redis.port=xxx spring.redis.port=xxx
spring.redis.password=xxx spring.redis.password=xxx
``` ```
4.如需配置session失效时间,请在SpringSessionConfig类中修改maxInactiveIntervalInSeconds属性值 4.需要把SpringSessionConfig类中的注释打开
\ No newline at end of file ```
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
```
5.如需配置session失效时间,请在SpringSessionConfig类中修改maxInactiveIntervalInSeconds属性值
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.stylefeng</groupId> <groupId>com.stylefeng</groupId>
<artifactId>guns</artifactId> <artifactId>guns</artifactId>
<version>1.0.0-SNAPSHOT</version> <version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>guns</name> <name>guns</name>
<description>guns 的spring boot版本</description> <description>guns 的spring boot版本</description>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version> <version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository --> <relativePath/> <!-- lookup parent from repository -->
</parent> </parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version> <java.version>1.8</java.version>
<shiro.version>1.4.0</shiro.version> <shiro.version>1.4.0</shiro.version>
<mybatisplus-spring-boot-starter.version>1.0.4</mybatisplus-spring-boot-starter.version> <mybatisplus-spring-boot-starter.version>1.0.4</mybatisplus-spring-boot-starter.version>
<mybatis-plus.version>2.1-gamma</mybatis-plus.version> <mybatis-plus.version>2.1-gamma</mybatis-plus.version>
<fastjson.version>1.2.31</fastjson.version> <fastjson.version>1.2.31</fastjson.version>
<commons.io.version>2.5</commons.io.version> <commons.io.version>2.5</commons.io.version>
<velocity.version>1.7</velocity.version> <velocity.version>1.7</velocity.version>
<kaptcha.version>2.3.2</kaptcha.version> <kaptcha.version>2.3.2</kaptcha.version>
<ehcache.version>3.3.1</ehcache.version> <ehcache.version>3.3.1</ehcache.version>
<zxing.version>3.2.1</zxing.version> <zxing.version>3.2.1</zxing.version>
<druid.version>1.0.28</druid.version> <druid.version>1.0.28</druid.version>
<beetl.version>2.7.15</beetl.version> <beetl.version>2.7.15</beetl.version>
<swagger.version>2.2.2</swagger.version> <swagger.version>2.2.2</swagger.version>
</properties> </properties>
<dependencies> <dependencies>
<!--spring boot依赖--> <!--spring boot依赖-->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId> <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId> <artifactId>spring-boot-starter-aop</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId> <artifactId>spring-boot-starter-cache</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId> <artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>${mybatisplus-spring-boot-starter.version}</version> <version>${mybatisplus-spring-boot-starter.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId> <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId> <artifactId>spring-boot-starter-validation</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId> <artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<!--shiro依赖--> <!--shiro依赖-->
<dependency> <dependency>
<groupId>org.apache.shiro</groupId> <groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId> <artifactId>shiro-core</artifactId>
<version>${shiro.version}</version> <version>${shiro.version}</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.shiro</groupId> <groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId> <artifactId>shiro-spring</artifactId>
<version>${shiro.version}</version> <version>${shiro.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.shiro</groupId> <groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId> <artifactId>shiro-ehcache</artifactId>
<version>${shiro.version}</version> <version>${shiro.version}</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<!--其他依赖--> <!--其他依赖-->
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency> <!-- 需要分布式session的话需要放开注释
<groupId>org.springframework.session</groupId> <dependency>
<artifactId>spring-session</artifactId> <groupId>org.springframework.session</groupId>
<scope>provided</scope><!-- 需要分布式session的话需要改为compile --> <artifactId>spring-session</artifactId>
</dependency> </dependency>
<dependency> -->
<groupId>com.baomidou</groupId> <dependency>
<artifactId>mybatis-plus</artifactId> <groupId>com.baomidou</groupId>
<version>${mybatis-plus.version}</version> <artifactId>mybatis-plus</artifactId>
</dependency> <version>${mybatis-plus.version}</version>
<dependency> </dependency>
<groupId>com.alibaba</groupId> <dependency>
<artifactId>fastjson</artifactId> <groupId>com.alibaba</groupId>
<version>${fastjson.version}</version> <artifactId>fastjson</artifactId>
</dependency> <version>${fastjson.version}</version>
<dependency> </dependency>
<groupId>com.alibaba</groupId> <dependency>
<artifactId>druid</artifactId> <groupId>com.alibaba</groupId>
<version>${druid.version}</version> <artifactId>druid</artifactId>
</dependency> <version>${druid.version}</version>
<dependency> </dependency>
<groupId>commons-io</groupId> <dependency>
<artifactId>commons-io</artifactId> <groupId>commons-io</groupId>
<version>${commons.io.version}</version> <artifactId>commons-io</artifactId>
</dependency> <version>${commons.io.version}</version>
<dependency> </dependency>
<groupId>com.github.penggle</groupId> <dependency>
<artifactId>kaptcha</artifactId> <groupId>com.github.penggle</groupId>
<version>${kaptcha.version}</version> <artifactId>kaptcha</artifactId>
</dependency> <version>${kaptcha.version}</version>
<dependency> </dependency>
<groupId>org.ehcache</groupId> <dependency>
<artifactId>ehcache</artifactId> <groupId>org.ehcache</groupId>
<version>${ehcache.version}</version> <artifactId>ehcache</artifactId>
</dependency> <version>${ehcache.version}</version>
<dependency> </dependency>
<groupId>com.google.zxing</groupId> <dependency>
<artifactId>core</artifactId> <groupId>com.google.zxing</groupId>
<version>${zxing.version}</version> <artifactId>core</artifactId>
</dependency> <version>${zxing.version}</version>
<dependency> </dependency>
<groupId>org.apache.velocity</groupId> <dependency>
<artifactId>velocity</artifactId> <groupId>org.apache.velocity</groupId>
<version>${velocity.version}</version> <artifactId>velocity</artifactId>
</dependency> <version>${velocity.version}</version>
<dependency> </dependency>
<groupId>com.ibeetl</groupId> <dependency>
<artifactId>beetl</artifactId> <groupId>com.ibeetl</groupId>
<version>${beetl.version}</version> <artifactId>beetl</artifactId>
</dependency> <version>${beetl.version}</version>
<dependency> </dependency>
<groupId>io.springfox</groupId> <dependency>
<artifactId>springfox-swagger2</artifactId> <groupId>io.springfox</groupId>
<version>${swagger.version}</version> <artifactId>springfox-swagger2</artifactId>
</dependency> <version>${swagger.version}</version>
<dependency> </dependency>
<groupId>io.springfox</groupId> <dependency>
<artifactId>springfox-swagger-ui</artifactId> <groupId>io.springfox</groupId>
<version>${swagger.version}</version> <artifactId>springfox-swagger-ui</artifactId>
</dependency> <version>${swagger.version}</version>
</dependency>
</dependencies>
</dependencies>
<build>
<plugins> <build>
<plugin> <plugins>
<groupId>org.apache.maven.plugins</groupId> <plugin>
<artifactId>maven-compiler-plugin</artifactId> <groupId>org.apache.maven.plugins</groupId>
<version>3.1</version> <artifactId>maven-compiler-plugin</artifactId>
<configuration> <version>3.1</version>
<source>1.8</source> <configuration>
<target>1.8</target> <source>1.8</source>
</configuration> <target>1.8</target>
</plugin> </configuration>
<plugin> </plugin>
<groupId>org.springframework.boot</groupId> <plugin>
<artifactId>spring-boot-maven-plugin</artifactId> <groupId>org.springframework.boot</groupId>
</plugin> <artifactId>spring-boot-maven-plugin</artifactId>
</plugins> </plugin>
<resources> </plugins>
<resource> <resources>
<directory>src/main/webapp</directory> <resource>
</resource> <directory>src/main/webapp</directory>
<resource> </resource>
<directory>src/main/resources</directory> <resource>
</resource> <directory>src/main/resources</directory>
<resource> </resource>
<directory>src/main/java</directory> <resource>
<includes> <directory>src/main/java</directory>
<include>**/*.xml</include> <includes>
</includes> <include>**/*.xml</include>
</resource> </includes>
</resources> </resource>
</build> </resources>
</build>
</project>
</project>
package com.stylefeng.guns.config; package com.stylefeng.guns.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
/**
/** * spring session配置
* spring session配置 *
* * @author fengshuonan
* @author fengshuonan * @date 2017-07-13 21:05
* @date 2017-07-13 21:05 */
*/ //@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800) //session过期时间 如果部署多机环境,需要打开注释
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800) //session过期时间 @ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "true")
@ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "true") public class SpringSessionConfig {
public class SpringSessionConfig {
}
}
...@@ -24,7 +24,7 @@ import org.springframework.context.annotation.Bean; ...@@ -24,7 +24,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.DependsOn;
import java.util.HashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
/** /**
...@@ -145,7 +145,7 @@ public class ShiroConfig { ...@@ -145,7 +145,7 @@ public class ShiroConfig {
* user 验证通过或RememberMe登录的都可以 * user 验证通过或RememberMe登录的都可以
* *
*/ */
Map<String, String> hashMap = new HashMap<>(); Map<String, String> hashMap = new LinkedHashMap<>();
hashMap.put("/static/**", "anon"); hashMap.put("/static/**", "anon");
hashMap.put("/login", "anon"); hashMap.put("/login", "anon");
hashMap.put("/global/sessionError", "anon"); hashMap.put("/global/sessionError", "anon");
......
...@@ -8,6 +8,7 @@ import org.aspectj.lang.ProceedingJoinPoint; ...@@ -8,6 +8,7 @@ import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.annotation.Pointcut;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
...@@ -18,6 +19,7 @@ import org.springframework.stereotype.Component; ...@@ -18,6 +19,7 @@ import org.springframework.stereotype.Component;
*/ */
@Aspect @Aspect
@Component @Component
@ConditionalOnProperty(prefix = "guns", name = "session-open", havingValue = "true")
public class SessionTimeoutInterceptor extends BaseController { public class SessionTimeoutInterceptor extends BaseController {
@Pointcut("execution(* com.stylefeng.guns.*..controller.*.*(..))") @Pointcut("execution(* com.stylefeng.guns.*..controller.*.*(..))")
......
package com.stylefeng.guns.core.template.engine.base; package com.stylefeng.guns.core.template.engine.base;
import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.core.util.ToolUtil;
import com.sun.javafx.PlatformUtil;
import org.beetl.core.Configuration; import org.beetl.core.Configuration;
import org.beetl.core.GroupTemplate; import org.beetl.core.GroupTemplate;
import org.beetl.core.Template; import org.beetl.core.Template;
...@@ -53,7 +54,11 @@ public abstract class GunsTemplateEngine extends AbstractTemplateEngine { ...@@ -53,7 +54,11 @@ public abstract class GunsTemplateEngine extends AbstractTemplateEngine {
public void generateFile(String template,String filePath){ public void generateFile(String template,String filePath){
Template pageTemplate = groupTemplate.getTemplate(template); Template pageTemplate = groupTemplate.getTemplate(template);
configTemplate(pageTemplate); configTemplate(pageTemplate);
filePath = filePath.replaceAll("\\\\",File.separator); if(PlatformUtil.isLinux()){
filePath = filePath.replaceAll("/+|\\\\+","/");
}else{
filePath = filePath.replaceAll("/+|\\\\+","\\\\");
}
File file = new File(filePath); File file = new File(filePath);
File parentFile = file.getParentFile(); File parentFile = file.getParentFile();
if(!parentFile.exists()){ if(!parentFile.exists()){
......
...@@ -158,7 +158,7 @@ public class DeptController extends BaseController { ...@@ -158,7 +158,7 @@ public class DeptController extends BaseController {
} }
private void deptSetPids(Dept dept) { private void deptSetPids(Dept dept) {
if (ToolUtil.isEmpty(dept.getPid()) || dept.getPid().equals("0")) { if (ToolUtil.isEmpty(dept.getPid()) || dept.getPid().equals(0)) {
dept.setPid(0); dept.setPid(0);
dept.setPids("[0],"); dept.setPids("[0],");
} else { } else {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
guns: guns:
swagger-open: true #是否开启swagger (true/false) swagger-open: true #是否开启swagger (true/false)
kaptcha-open: false #是否开启登录时验证码 (true/false) kaptcha-open: false #是否开启登录时验证码 (true/false)
session-open: false #是否开启session验证 (true/false) session-open: false #是否开启session超时验证(受影响的类SessionTimeoutInterceptor) (true/false)
#file-upload-path: d:/tmp #文件上传目录(不配置的话为java.io.tmpdir目录) #file-upload-path: d:/tmp #文件上传目录(不配置的话为java.io.tmpdir目录)
muti-datasource-open: false #是否开启多数据源(true/false) muti-datasource-open: false #是否开启多数据源(true/false)
spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment