修改 模块的文件名

This commit is contained in:
jamen
2018-02-22 16:19:54 +08:00
parent 7d967e37db
commit 5c9542bc1f
41 changed files with 27818 additions and 55602 deletions
+88 -4546
View File
File diff suppressed because one or more lines are too long
+27289 -50579
View File
File diff suppressed because it is too large Load Diff
+43 -19
View File
@@ -20,7 +20,9 @@
<!--版本说明-->
<properties>
<shiro.version>1.3.2</shiro.version>
<ehcache.core.version>2.6.11</ehcache.core.version>
<ehcache.version>3.3.1</ehcache.version>
<shiro.version>1.4.0</shiro.version>
<commons-lang3.version>3.4</commons-lang3.version>
<slife.version>1.0-SNAPSHOT</slife.version>
<swagger.version>2.7.0</swagger.version>
@@ -42,13 +44,13 @@
<module>slife-common</module>
<module>slife-sys</module>
<module>slife-web</module>
<module>slife-wx-applet</module>
<module>slife-activiti</module>
<module>slife-log</module>
<!-- <module>slife-test</module>-->
<module>slife-blog</module>
<module>slife-drools</module>
<module>slife-code</module>
<module>slife-drools</module>
<module>slife-activiti</module>
<module>slife-blog</module>
<module>slife-wx-applet</module>
</modules>
<!--全局依赖-->
@@ -98,17 +100,44 @@
<artifactId>shiro-spring</artifactId>
<version>${shiro.version}</version>
</dependency>
<!--缓存-->
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>${ehcache.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>${ehcache.core.version}</version>
</dependency>
<!-- shiro ehcache -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>${shiro.version}</version>
</dependency>
<!-- ehchache -->
<!-- https://mvnrepository.com/artifact/org.crazycake/shiro-redis -->
<dependency>
<groupId>org.crazycake</groupId>
<artifactId>shiro-redis</artifactId>
<version>2.4.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
@@ -142,14 +171,7 @@
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
@@ -231,6 +253,11 @@
<artifactId>slife-sys</artifactId>
<version>${slife.version}</version>
</dependency>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-bkapp</artifactId>
<version>${slife.version}</version>
</dependency>
<dependency>
<groupId>com.slife</groupId>
@@ -311,9 +338,6 @@
</configuration>
</plugin>
</plugins>
</build>
+6
View File
@@ -44,6 +44,12 @@
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
</dependencies>
@@ -36,7 +36,7 @@ public enum HttpCodeEnum {
MODEL_NOT_EXIST(1000, "模型不存在"),
USERNAME_OR_PASSWORD_ERR(2000,"用户名或密码错误"),
DELETE_DEFAULT_PHOTO_ERR(2001,"默认头像不可删除");
DELETE_DEFAULT_PHOTO_ERR(2001,"默认头像不可删除"), TOKEN_ERR(200, "token无效");
private final int code;
private final String message;
@@ -29,6 +29,8 @@ public class SlifeExceptionHandler {
@ExceptionHandler(BindException.class)
public ResponseEntity<ReturnDTO> bindExceptionHandler(BindException e){
return new ResponseEntity(ReturnDTOUtil.custom(HttpCodeEnum.INVALID_REQUEST.getCode(),e.getMessage()),
@@ -36,6 +38,17 @@ public class SlifeExceptionHandler {
}
/**
* UnauthorizedException 权限异常
* @param e
* @return
*/
/* @ExceptionHandler(UnauthorizedException.class)
public ResponseEntity<ReturnDTO> handleUnauthorizedException(UnauthorizedException e) {
logger.info(e.getError());
return new ResponseEntity(e.getReturnDTO(), HttpStatus.UNAUTHORIZED);
}*/
/**
* 业务异常
*
@@ -14,10 +14,12 @@ public class ShiroUser implements Serializable{
public Long id;
public String username;
public String name;
public ShiroUser(Long id, String username, String name){
public String photo;
public ShiroUser(Long id, String username, String name,String photo){
this.id=id;
this.username=username;
this.name=name;
this.photo=photo;
}
public Long getId() {
@@ -44,6 +46,14 @@ public class ShiroUser implements Serializable{
this.name = name;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
/**
* 本函数输出将作为默认的<shiro:principal/>输出.
*/
@@ -16,6 +16,9 @@ public class SlifeSysUser {
public static String name() {
return ShiroUser().getName();
}
public static String photo() {
return ShiroUser().getPhoto();
}
public static Long id() {
return ShiroUser().getId();
@@ -5,6 +5,9 @@ import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
/**
* @author chen
*/
public class IPUtils {
private static Logger logger = LoggerFactory.getLogger(IPUtils.class);
@@ -5,6 +5,7 @@ import org.apache.commons.lang3.StringEscapeUtils;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -20,6 +21,23 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
private static final char SEPARATOR = '_';
private static final String CHARSET_NAME = "UTF-8";
private static Pattern p = Pattern.compile("<([a-zA-Z]+)[^<>]*>");
/**
* 获取混淆MD5签名用的随机字符串
* @param length
* @return
*/
public String getRandomString(int length) {
String base = "abcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
/**
* 转换为字节数组
*
@@ -2,9 +2,9 @@
<html>
<head>
<title>日志列表</title>
<link href="${base}/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="${base}/css/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
<link href="${base}/css/animate.css" rel="stylesheet">
<link href="${rc.contextPath}/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="${rc.contextPath}/css/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
<link href="${rc.contextPath}/css/animate.css" rel="stylesheet">
<script>
var url = "${url}";
</script>
@@ -57,11 +57,11 @@
</div>
<!-- Bootstrap table -->
<script src="${base}/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${base}/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
<script src="${base}/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="${base}/js/slife/datatable.js"></script>
<script src="${rc.contextPath}/js/slife/datatable.js"></script>
<script type="text/javascript">
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.slife.base.controller.BaseController;
import com.slife.base.vo.PCAjaxVO;
import com.slife.service.ISysDictService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.aop.support.AopUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -32,6 +33,7 @@ public class SysDictController extends BaseController {
*
* @return
*/
@RequiresPermissions("sys:dict:list")
@GetMapping(value = "")
public String list(Model model) {
model.addAttribute("dictTrees", JSON.toJSON(sysDictService.getDictTree()).toString());
@@ -8,6 +8,7 @@ import com.slife.enums.SysMenuType;
import com.slife.service.ISysMenuService;
import com.slife.shiro.SlifeSysUser;
import com.slife.util.ReturnDTOUtil;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.aop.support.AopUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -54,6 +55,7 @@ public class SysMenuController extends BaseController{
/**
* 进入系统菜单管理首页
*/
@RequiresPermissions("sys:menu:list")
@GetMapping(value = "")
public String list(Model model) {
@@ -104,4 +106,17 @@ public class SysMenuController extends BaseController{
sysMenuService.disableMenu(id);
return ReturnDTOUtil.success();
}
/**
* 删除菜单
* @param id
* @return
*/
@DeleteMapping(value="delete/{id}")
@ResponseBody
public ReturnDTO delete(@PathVariable("id") Long id){
sysMenuService.deleteMenu(id);
return ReturnDTOUtil.success();
}
}
@@ -16,6 +16,7 @@ import com.slife.service.ISysUserOfficeService;
import com.slife.shiro.SlifeSysUser;
import com.slife.util.ReturnDTOUtil;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.aop.support.AopUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -49,6 +50,7 @@ public class SysOfficeController extends BaseController {
private ISysUserOfficeService sysUserOfficeService;
@RequiresPermissions("sys:office:list")
@SLog("获取组织用户列表数据")
@ApiOperation(value = "获取组织用户列表数据", notes = "获取组织用户列表数据:使用约定的DataTable")
@PostMapping(value = "/user/list")
@@ -10,6 +10,7 @@ import com.slife.service.ISysMenuService;
import com.slife.service.ISysRoleService;
import com.slife.util.ReturnDTOUtil;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.aop.support.AopUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -37,30 +38,13 @@ public class SysRoleController extends BaseController {
@PostMapping(value = "/tf")
@ResponseBody
public ReturnDTO tf() {
System.out.println("==================");
System.out.println(sysRoleService);
System.out.println(AopUtils.isAopProxy(sysRoleService));
System.out.println(AopUtils.isCglibProxy(sysRoleService));
System.out.println(AopUtils.isJdkDynamicProxy(sysRoleService));
System.out.println("==================");
System.out.println(this);
System.out.println(AopUtils.isAopProxy(this));
System.out.println(AopUtils.isCglibProxy(this));
System.out.println(AopUtils.isJdkDynamicProxy(this));
sysRoleService.tf();
return ReturnDTOUtil.success();
}
/**
* 进入系统角色列表
*
* @param model
* @return
*/
@RequiresPermissions("sys:role:list")
@GetMapping(value = "")
public String list(Model model, HttpServletRequest request) {
model.addAttribute("url", request.getContextPath() + "/sys/role/");
@@ -1,7 +1,15 @@
package com.slife.controller;
import com.slife.base.entity.ReturnDTO;
import com.slife.cache.CacheUtils;
import com.slife.entity.SysMenu;
import com.slife.util.ReturnDTOUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* Created by chen on 2017/9/28.
@@ -13,13 +21,32 @@ import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = "/test1")
public class SysTestController {
// @Autowired
// private StringRedisTemplate stringRedisTemplate;
/* @Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate redisTemplate;
/* @ResponseBody
@ResponseBody
@GetMapping(value = "/redisTest")
public void redisTest(){
stringRedisTemplate.opsForValue().set("xxx","dddd");
stringRedisTemplate.opsForSet().add("2","x","c");
public void redisTest() {
stringRedisTemplate.opsForValue().set("xxx", "dddd");
stringRedisTemplate.opsForSet().add("2", "x", "c");
}*/
@ResponseBody
@GetMapping(value = "/redisTest")
public ReturnDTO redisTest() {
CacheUtils.put("tn","k","dd");
List<String> keys = CacheUtils.getKeys("books");
List<String> tnkeys = CacheUtils.getKeys("tn");
List<String> defaultCache = CacheUtils.getKeys("defaultCache");
List<String> spring = CacheUtils.getKeys("spring");
List<String> d = CacheUtils.getKeys("*");
List<SysMenu> sysMenus = CacheUtils.get("books", 1);
return ReturnDTOUtil.success(sysMenus);
}
}
@@ -16,6 +16,7 @@ import com.slife.util.PasswordUtils;
import com.slife.util.ReturnDTOUtil;
import com.slife.util.StringUtils;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.aop.support.AopUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -106,6 +107,7 @@ public class SysUserController extends BaseController {
return ReturnDTOUtil.success();
}
@RequiresPermissions("sys:user:list")
@ApiOperation(value = "进入用户列表界面", notes = "进入用户列表界面")
@GetMapping(value = "")
public String list(Model model, HttpServletRequest request) {
@@ -24,6 +24,6 @@ public interface SysRoleDao extends CrudDao<SysRole> {
* @param userId
* @return
*/
List<SysRoleVO> selectRoleByUserId(Long userId);
List<SysRole> selectRoleByUserId(Long userId);
}
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotations.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.slife.constant.Global;
import com.slife.enums.DataScopeEnum;
import com.slife.vo.SysMenuVO;
import org.hibernate.validator.constraints.Length;
import java.io.Serializable;
@@ -40,6 +41,18 @@ public class SysRole extends CompanyLinkEntity<SysRole> {
@TableField(exist = false)
private List<SysMenu> sysMenus;
public List<String> getPermissionList() {
List<String> permiss = new ArrayList<String>();
if (getSysMenus() != null && getSysMenus().size() > 0) {
for (SysMenu sysMenu : getSysMenus()) {
permiss.add(sysMenu.getPermission());
}
}
return permiss;
}
/**
* varchar(64) NULL是否可用
*/
@@ -3,9 +3,7 @@ package com.slife.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.slife.base.entity.DataEntity;
import com.slife.constant.Global;
import com.slife.vo.SysRoleVO;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
@@ -50,4 +50,10 @@ public interface ISysMenuService extends IBaseService<SysMenu> {
* @param id
*/
void disableMenu(Long id);
/**
* 删除菜单
* @param id
*/
Boolean deleteMenu(Long id);
}
@@ -1,11 +1,9 @@
package com.slife.service;
import com.baomidou.mybatisplus.service.IService;
import com.slife.base.service.IBaseService;
import com.slife.base.vo.DataTable;
import com.slife.base.vo.JsTree;
import com.slife.entity.SysRole;
import com.slife.vo.SysRoleVO;
import java.util.List;
import java.util.Map;
@@ -39,7 +37,7 @@ public interface ISysRoleService extends IBaseService<SysRole> {
* @param userId
* @return
*/
List<SysRoleVO> selectRoleByUserId(Long userId);
List<SysRole> selectRoleByUserId(Long userId);
/**
* 查询系统中,没有删除,并且是可以使用的角色
@@ -11,10 +11,15 @@ import com.slife.entity.SysMenu;
import com.slife.enums.HttpCodeEnum;
import com.slife.exception.SlifeException;
import com.slife.service.ISysMenuService;
import com.slife.service.ISysRoleMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author chen
@@ -28,6 +33,8 @@ import java.util.*;
@Transactional(readOnly = true, rollbackFor = Exception.class)
public class SysMenuService extends BaseService<SysMenuDao, SysMenu> implements ISysMenuService {
@Autowired
private ISysRoleMenuService sysRoleMenuService;
/**
* 把菜单设置为失效
@@ -47,6 +54,26 @@ public class SysMenuService extends BaseService<SysMenuDao, SysMenu> implements
}
/**
* 删除菜单和子菜单
*
* @param id
* @return
*/
@Transactional(readOnly = false, rollbackFor = Exception.class)
@Override
public Boolean deleteMenu(Long id) {
SysMenu sysMenu = selectById(id);
Optional.ofNullable(sysMenu).orElseThrow(() -> new SlifeException(HttpCodeEnum.NOT_FOUND));
List<SysMenu> delList = selectList(Condition.create().like("path", sysMenu.getPath(), SqlLike.RIGHT));
List<Long> ids = delList.stream().parallel().map(menu -> menu.getId()).collect(Collectors.toList());
deleteBatchIds(ids);
//删除对应的角色关联
sysRoleMenuService.delete(Condition.create().in("sys_menu_id", ids));
return true;
}
/**
* 新增菜单
*
@@ -96,6 +123,8 @@ public class SysMenuService extends BaseService<SysMenuDao, SysMenu> implements
* @param userId
* @return
*/
@Cacheable(cacheNames="books", key="#userId")
@Override
public List<SysMenu> CaseMenu(Long userId) {
Map<Long, List<SysMenu>> map = new HashMap();
@@ -16,7 +16,6 @@ import com.slife.service.ISysMenuService;
import com.slife.service.ISysRoleMenuService;
import com.slife.service.ISysRoleService;
import com.slife.service.ISysUserRoleService;
import com.slife.vo.SysRoleVO;
import org.springframework.aop.support.AopUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -109,8 +108,9 @@ public class SysRoleService extends BaseService<SysRoleDao, SysRole> implements
* @return
*/
@Override
public List<SysRoleVO> selectRoleByUserId(Long userId) {
return this.baseMapper.selectRoleByUserId(userId);
public List<SysRole> selectRoleByUserId(Long userId) {
List<SysRole> sysRoleList=this.baseMapper.selectRoleByUserId(userId);
return sysRoleList;
}
/**
@@ -2,26 +2,22 @@ package com.slife.shiro;
import com.slife.constant.Global;
import com.slife.constant.Setting;
import com.slife.entity.SysRole;
import com.slife.entity.SysUser;
import com.slife.service.ISysRoleService;
import com.slife.service.ISysUserService;
import com.slife.util.ApplicationContextRegister;
import com.slife.util.Encodes;
import com.slife.vo.SysRoleVO;
import org.apache.shiro.authc.*;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.cache.ehcache.EhCacheManager;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@@ -40,11 +36,7 @@ public class AuthRealm extends AuthorizingRealm {
private Logger logger= LoggerFactory.getLogger(getClass());
@Autowired
public void setCacheManager(EhCacheManager ehCacheManager) {
super.setCacheManager(ehCacheManager);
}
/**
* 设定密码校验的Hash算法与迭代次数
@@ -71,7 +63,7 @@ public class AuthRealm extends AuthorizingRealm {
throw new DisabledAccountException();
}
byte[] salt = Encodes.decodeHex(sysUser.getPassword().substring(0, 16));
return new SimpleAuthenticationInfo(new ShiroUser(sysUser.getId(),loginName, sysUser.getName()),
return new SimpleAuthenticationInfo(new ShiroUser(sysUser.getId(),loginName, sysUser.getName(),sysUser.getPhoto()),
sysUser.getPassword().substring(16), ByteSource.Util.bytes(salt),
getName());
} else {
@@ -91,11 +83,11 @@ public class AuthRealm extends AuthorizingRealm {
ISysRoleService sysRoleService = ApplicationContextRegister.getBean(ISysRoleService.class);
for (SysRoleVO sysRoleVO : sysRoleService.selectRoleByUserId(shiroUser.id)) {
for (SysRole sysRole : sysRoleService.selectRoleByUserId(shiroUser.id)) {
// 基于Role的权限信息
info.addRole(sysRoleVO.getCode());
info.addRole(sysRole.getCode());
// 基于Permission的权限信息
info.addStringPermissions(sysRoleVO.getPermissionList());
info.addStringPermissions(sysRole.getPermissionList());
}
return info;
}
@@ -1,7 +1,7 @@
<html>
<head>
<title>数据字典管理</title>
<link rel="stylesheet" type="text/css" href="${base}/css/plugins/jsTree/style.min.css"/>
<link rel="stylesheet" type="text/css" href="${rc.contextPath}/css/plugins/jsTree/style.min.css"/>
<style>
#dict_edit_table .control-label {
text-align: left !important;
@@ -53,7 +53,7 @@
</div>
<div class="portlet-body form" id="dict_edit_table">
<form class="form-horizontal m-t" action="${base}/sys/dict/insert" method="POST" id="dictForm">
<form class="form-horizontal m-t" action="${rc.contextPath}/sys/dict/insert" method="POST" id="dictForm">
<input type="hidden" name="id"/>
<input type="hidden" name="dicPid" value="0"/>
<input type="hidden" name="path"/>
@@ -163,10 +163,10 @@
</div>
</div>
</div>
<script src="${base}/js/plugins/jsTree/jstree.min.js" type="text/javascript"></script>
<script src="${base}/js/plugins/validate/jquery.validate.min.js"></script>
<script src="${base}/js/plugins/validate/messages_zh.min.js"></script>
<script src="${base}/js/jquery.form.js"></script>
<script src="${rc.contextPath}/js/plugins/jsTree/jstree.min.js" type="text/javascript"></script>
<script src="${rc.contextPath}/js/plugins/validate/jquery.validate.min.js"></script>
<script src="${rc.contextPath}/js/plugins/validate/messages_zh.min.js"></script>
<script src="${rc.contextPath}/js/jquery.form.js"></script>
<script type="text/javascript">
@@ -194,7 +194,7 @@
text = selectd.node.text;
if (dic_id) {
$.ajax({
url: '${base}/sys/dict/select/' + dic_id,
url: '${rc.contextPath}/sys/dict/select/' + dic_id,
type: 'GET',
success: function (msg) {
var data = msg.dict;
@@ -303,7 +303,7 @@
btn: ['是', '否']
},function () {
$.ajax({
url: '${base}/sys/dict/delete/' + dic_id,
url: '${rc.contextPath}/sys/dict/delete/' + dic_id,
type: 'DELETE',
success: function (data) {
if (data.success) {
@@ -321,7 +321,7 @@
$('.btn-rush').click(function () {
$.ajax({
url: '${base}/sys/dict/rush',
url: '${rc.contextPath}/sys/dict/rush',
type: 'GET',
success: function (data) {
layer.msg('刷新成功');
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>欢迎页</title>
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<link rel="stylesheet" href="${base}/css/bootstrap.min.css">
<link rel="stylesheet" href="${rc.contextPath}/css/bootstrap.min.css">
</head>
<body>
<div class="panel panel-default">
@@ -1,7 +1,7 @@
<html>
<head>
<title>菜单管理</title>
<link rel="stylesheet" type="text/css" href="${base}/css/plugins/jsTree/style.min.css"/>
<link rel="stylesheet" type="text/css" href="${rc.contextPath}/css/plugins/jsTree/style.min.css"/>
<style>
#menu_edit_table .control-label {
text-align: left !important;
@@ -50,14 +50,17 @@
<span class="hidden-480">编辑此菜单</span>
</button>
<button type="button" class="btn red btn-delete btn-danger" disabled="disabled">
<#-- <button type="button" class="btn red btn-delete btn-danger" disabled="disabled">
<i class="fa fa-trash-o"></i>
<span class="hidden-480">禁用此菜单</span>
</button>-->
<button type="button" class="btn red btn-delete btn-danger" disabled="disabled">
<i class="fa fa-trash-o"></i>
<span class="hidden-480">删除此菜单</span>
</button>
</div>
<div class="portlet-body form" id="menu_edit_table">
<form id="menuForm" action="${base}/sys/menu/insert" class="form-horizontal form-bordered"
<form id="menuForm" action="${rc.contextPath}/sys/menu/insert" class="form-horizontal form-bordered"
method="POST">
<input type="hidden" name="id"/>
<input type="hidden" name="parentId" value="0"/>
@@ -262,10 +265,10 @@
</div>
</div>
<script src="${base}/js/plugins/jsTree/jstree.min.js" type="text/javascript"></script>
<script src="${base}/js/plugins/validate/jquery.validate.min.js"></script>
<script src="${base}/js/plugins/validate/messages_zh.min.js"></script>
<script src="${base}/js/jquery.form.js"></script>
<script src="${rc.contextPath}/js/plugins/jsTree/jstree.min.js" type="text/javascript"></script>
<script src="${rc.contextPath}/js/plugins/validate/jquery.validate.min.js"></script>
<script src="${rc.contextPath}/js/plugins/validate/messages_zh.min.js"></script>
<script src="${rc.contextPath}/js/jquery.form.js"></script>
<script type="text/javascript">
@@ -294,7 +297,7 @@
text = selectd.node.text;
if (menuid) {
$.ajax({
url: '${base}/sys/menu/select/' + menuid,
url: '${rc.contextPath}/sys/menu/select/' + menuid,
type: 'GET',
success: function (data) {
data=data.menu;
@@ -422,12 +425,12 @@
});
$('.btn-delete').click(function () {
if (menuid){
layer.confirm('确认要禁用此菜单及其下级所有资源吗?', {
layer.confirm('确认要删除此菜单及其下级所有资源吗?', {
btn: ['确定', '取消']
}, function () {
$.ajax({
url: '${base}/sys/menu/disable/' + menuid,
type: "POST",
url: '${rc.contextPath}/sys/menu/delete/' + menuid,
type: "DELETE",
success: function (r) {
window.location.reload();
@@ -454,7 +457,7 @@
dataType: "json",
cache: true,
type: "GET",
url: "${base}/js/icon.json",
url: "${rc.contextPath}/js/icon.json",
traditional: true,
success: function (data) {
// stop_request_load();
@@ -1,10 +1,10 @@
<html>
<head>
<title>组织管理</title>
<link rel="stylesheet" type="text/css" href="${base}/css/plugins/jsTree/style.min.css"/>
<link href="${base}/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="${base}/css/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
<link href="${base}/css/animate.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="${rc.contextPath}/css/plugins/jsTree/style.min.css"/>
<link href="${rc.contextPath}/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="${rc.contextPath}/css/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
<link href="${rc.contextPath}/css/animate.css" rel="stylesheet">
<script>
var url = "/sys/office/user/";
</script>
@@ -63,7 +63,7 @@
</div>
<div class="portlet-body form" id="menu_edit_table">
<form id="officeForm" action="${base}/sys/office/insert" class="form-horizontal form-bordered"
<form id="officeForm" action="${rc.contextPath}/sys/office/insert" class="form-horizontal form-bordered"
method="POST">
<input type="hidden" name="id"/>
<input type="hidden" name="parentId" value="0"/>
@@ -255,17 +255,17 @@
</div>
</div>
<script src="${base}/js/plugins/jsTree/jstree.min.js" type="text/javascript"></script>
<script src="${base}/js/plugins/validate/jquery.validate.min.js"></script>
<script src="${base}/js/plugins/validate/messages_zh.min.js"></script>
<script src="${base}/js/jquery.form.js"></script>
<script src="${rc.contextPath}/js/plugins/jsTree/jstree.min.js" type="text/javascript"></script>
<script src="${rc.contextPath}/js/plugins/validate/jquery.validate.min.js"></script>
<script src="${rc.contextPath}/js/plugins/validate/messages_zh.min.js"></script>
<script src="${rc.contextPath}/js/jquery.form.js"></script>
<!-- Bootstrap table -->
<script src="${base}/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${base}/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
<script src="${base}/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="${base}/js/slife/datatable.js"></script>
<script src="${rc.contextPath}/js/slife/datatable.js"></script>
<script type="text/javascript">
@@ -281,7 +281,7 @@
align: 'center',
formatter: function (value, row, index) {
return '<img style="width:30px" src=${base}"'+value+'"/>';
return '<img style="width:30px" src=${rc.contextPath}"'+value+'"/>';
}
},
{
@@ -367,7 +367,7 @@
text = selectd.node.text;
if (menuid) {
$.ajax({
url: '${base}/sys/office/select/' + menuid,
url: '${rc.contextPath}/sys/office/select/' + menuid,
type: 'GET',
success: function (data) {
data=data.office;
@@ -495,7 +495,7 @@
btn: ['确定', '取消']
}, function () {
$.ajax({
url: '${base}/sys/office/disable/' + menuid,
url: '${rc.contextPath}/sys/office/disable/' + menuid,
type: "POST",
success: function (r) {
@@ -523,7 +523,7 @@
dataType: "json",
cache: true,
type: "GET",
url: "${base}/js/icon.json",
url: "${rc.contextPath}/js/icon.json",
traditional: true,
success: function (data) {
// stop_request_load();
@@ -2,29 +2,29 @@
<head>
<title>系统用户编辑</title>
<link href="${base}/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="${base}/css/font-awesome.min.css?v=4.4.0" rel="stylesheet">
<link href="${base}/css/animate.css" rel="stylesheet">
<link href="${base}/css/style.css?v=4.1.0" rel="stylesheet">
<link href="${base}/css/slife.css" rel="stylesheet">
<link href="${rc.contextPath}/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="${rc.contextPath}/css/font-awesome.min.css?v=4.4.0" rel="stylesheet">
<link href="${rc.contextPath}/css/animate.css" rel="stylesheet">
<link href="${rc.contextPath}/css/style.css?v=4.1.0" rel="stylesheet">
<link href="${rc.contextPath}/css/slife.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="${base}/css/plugins/jsTree/style.min.css"/>
<link rel="stylesheet" type="text/css" href="${rc.contextPath}/css/plugins/jsTree/style.min.css"/>
<!-- 全局js -->
<script src="${base}/js/jquery.min.js?v=2.1.4"></script>
<script src="${base}/js/bootstrap.min.js?v=3.3.6"></script>
<script src="${base}/js/plugins/validate/jquery.validate.min.js"></script>
<script src="${base}/js/plugins/validate/messages_zh.min.js"></script>
<script src="${base}/js/plugins/layer/layer.min.js"></script>
<script src="${base}/js/jquery.form.js"></script>
<script src="${rc.contextPath}/js/jquery.min.js?v=2.1.4"></script>
<script src="${rc.contextPath}/js/bootstrap.min.js?v=3.3.6"></script>
<script src="${rc.contextPath}/js/plugins/validate/jquery.validate.min.js"></script>
<script src="${rc.contextPath}/js/plugins/validate/messages_zh.min.js"></script>
<script src="${rc.contextPath}/js/plugins/layer/layer.min.js"></script>
<script src="${rc.contextPath}/js/jquery.form.js"></script>
<script>
var url = "${url}", action = "${action}";
</script>
<script src="${base}/js/slife/slife.js"></script>
<script src="${base}/js/slife/slifeform.js"></script>
<script src="${rc.contextPath}/js/slife/slife.js"></script>
<script src="${rc.contextPath}/js/slife/slifeform.js"></script>
</head>
<body class="gray-bg">
@@ -100,7 +100,7 @@
</div>
</div>
<script src="${base}/js/plugins/jsTree/jstree.js" type="text/javascript"></script>
<script src="${rc.contextPath}/js/plugins/jsTree/jstree.js" type="text/javascript"></script>
<script type="text/javascript">
var tree = $("#menuTree").jstree({
"checkbox": {"keep_selected_style": false},
@@ -157,7 +157,7 @@
code: {
maxlength: 64,
required: true,
remote: '${base}/sys/role/check/${role.id}'
remote: '${rc.contextPath}/sys/role/check/${role.id}'
},
name: {
maxlength: 64,
@@ -2,9 +2,9 @@
<html>
<head>
<title>用户列表</title>
<link href="${base}/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="${base}/css/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
<link href="${base}/css/animate.css" rel="stylesheet">
<link href="${rc.contextPath}/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="${rc.contextPath}/css/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
<link href="${rc.contextPath}/css/animate.css" rel="stylesheet">
<script>
var url = "${url}";
</script>
@@ -61,11 +61,11 @@
</div>
<!-- Bootstrap table -->
<script src="${base}/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${base}/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
<script src="${base}/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="${base}/js/slife/datatable.js"></script>
<script src="${rc.contextPath}/js/slife/datatable.js"></script>
<script type="text/javascript">
function getcolumns() {
@@ -2,31 +2,31 @@
<head>
<title>系统用户编辑</title>
<link href="${base}/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="${base}/css/font-awesome.min.css?v=4.4.0" rel="stylesheet">
<link href="${base}/css/animate.css" rel="stylesheet">
<link href="${base}/css/style.css?v=4.1.0" rel="stylesheet">
<link href="${base}/css/slife.css" rel="stylesheet">
<link href="${base}/css/plugins/select2/select2.css" rel="stylesheet">
<link href="${rc.contextPath}/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="${rc.contextPath}/css/font-awesome.min.css?v=4.4.0" rel="stylesheet">
<link href="${rc.contextPath}/css/animate.css" rel="stylesheet">
<link href="${rc.contextPath}/css/style.css?v=4.1.0" rel="stylesheet">
<link href="${rc.contextPath}/css/slife.css" rel="stylesheet">
<link href="${rc.contextPath}/css/plugins/select2/select2.css" rel="stylesheet">
<link href="${base}/css/plugins/dropzone/dropzone.css" rel="stylesheet">
<link href="${rc.contextPath}/css/plugins/dropzone/dropzone.css" rel="stylesheet">
<!-- 全局js -->
<script src="${base}/js/jquery.min.js?v=2.1.4"></script>
<script src="${base}/js/bootstrap.min.js?v=3.3.6"></script>
<script src="${base}/js/plugins/validate/jquery.validate.min.js"></script>
<script src="${base}/js/plugins/validate/messages_zh.min.js"></script>
<script src="${base}/js/plugins/layer/layer.min.js"></script>
<script src="${base}/js/jquery.form.js"></script>
<script src="${rc.contextPath}/js/jquery.min.js?v=2.1.4"></script>
<script src="${rc.contextPath}/js/bootstrap.min.js?v=3.3.6"></script>
<script src="${rc.contextPath}/js/plugins/validate/jquery.validate.min.js"></script>
<script src="${rc.contextPath}/js/plugins/validate/messages_zh.min.js"></script>
<script src="${rc.contextPath}/js/plugins/layer/layer.min.js"></script>
<script src="${rc.contextPath}/js/jquery.form.js"></script>
<script src="${base}/js/plugins/select2/select2.min.js"></script>
<script src="${base}/js/plugins/dropzone/dropzone.min.js"></script>
<script src="${rc.contextPath}/js/plugins/select2/select2.min.js"></script>
<script src="${rc.contextPath}/js/plugins/dropzone/dropzone.min.js"></script>
<script>
var url = "${url}", action = "${action}";
</script>
<script src="${base}/js/slife/slife.js"></script>
<script src="${base}/js/slife/slifeform.js"></script>
<script src="${rc.contextPath}/js/slife/slife.js"></script>
<script src="${rc.contextPath}/js/slife/slifeform.js"></script>
</head>
<body class="gray-bg">
@@ -241,7 +241,7 @@
minlength: 2,
maxlength: 30,
required: true,
remote: '${base}/sys/user/check/${sysUser.id}'
remote: '${rc.contextPath}/sys/user/check/${sysUser.id}'
},
name: {
required: true
@@ -2,9 +2,9 @@
<html>
<head>
<title>用户列表</title>
<link href="${base}/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="${base}/css/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
<link href="${base}/css/animate.css" rel="stylesheet">
<link href="${rc.contextPath}/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="${rc.contextPath}/css/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
<link href="${rc.contextPath}/css/animate.css" rel="stylesheet">
<script>
var url = "${url}";
</script>
@@ -63,11 +63,11 @@
<!-- Bootstrap table -->
<script src="${base}/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${base}/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
<script src="${base}/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
<script src="${rc.contextPath}/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="${base}/js/slife/datatable.js"></script>
<script src="${rc.contextPath}/js/slife/datatable.js"></script>
<script type="text/javascript">
function getcolumns() {
@@ -80,8 +80,7 @@
field: 'photo',
align: 'center',
formatter: function (value, row, index) {
return '<img style="width:30px" src=${base}"'+value+'"/>';
return '<img style="width:30px" src="${rc.contextPath}'+value+'"/>';
}
},
{
+60 -79
View File
@@ -1,99 +1,80 @@
<?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"
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>
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>
<artifactId>slife-web</artifactId>
<packaging>jar</packaging>
<artifactId>slife-web</artifactId>
<packaging>jar</packaging>
<name>slife-web</name>
<name>slife-web</name>
<description>web project for Spring Boot</description>
<description>web project for Spring Boot</description>
<parent>
<artifactId>slife</artifactId>
<groupId>com.slife</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<parent>
<artifactId>slife</artifactId>
<groupId>com.slife</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.0.2</version>
</dependency>
<dependencies>
<dependency>
<groupId>org.sitemesh</groupId>
<artifactId>sitemesh</artifactId>
</dependency>
<dependency>
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-activiti</artifactId>
</dependency>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-code</artifactId>
</dependency>
<dependency>
<groupId>org.sitemesh</groupId>
<artifactId>sitemesh</artifactId>
</dependency>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-blog</artifactId>
</dependency>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-sys</artifactId>
</dependency>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-wx-applet</artifactId>
</dependency>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-log</artifactId>
</dependency>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-test</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-code</artifactId>
</dependency>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-drools</artifactId>
</dependency>
</dependencies>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-sys</artifactId>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-log</artifactId>
</dependency>
<dependency>
<groupId>com.slife</groupId>
<artifactId>slife-bkapp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
@@ -4,6 +4,7 @@ import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
@@ -6,6 +6,7 @@ import com.alibaba.fastjson.serializer.ToStringSerializer;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.slife.config.sitemesh.WebSiteMeshFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.web.servlet.ErrorPage;
@@ -32,20 +33,22 @@ import java.util.List;
//@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/attach/**").addResourceLocations("file:E:/ideaword/moban/slife/attach/");
}
@Value("${attach_path}")
private String attachPath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/attach/**").addResourceLocations("file:"+attachPath);
}
/**
* 装饰器
* @return
* 2016年8月27日下午12:37:20
*
* @return 2016年8月27日下午12:37:20
*/
@Bean
public FilterRegistrationBean siteMeshFilter(){
public FilterRegistrationBean siteMeshFilter() {
FilterRegistrationBean fitler = new FilterRegistrationBean();
WebSiteMeshFilter siteMeshFilter = new WebSiteMeshFilter();
fitler.setFilter(siteMeshFilter);
@@ -54,7 +57,7 @@ public class MvcConfiguration extends WebMvcConfigurerAdapter {
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return new EmbeddedServletContainerCustomizer(){
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400.html"));
@@ -9,7 +9,7 @@ package com.slife.config.shiro;
*/
import com.slife.shiro.AuthRealm;
import org.apache.shiro.cache.ehcache.EhCacheManager;
import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
@@ -22,7 +22,6 @@ import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreato
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import java.util.LinkedHashMap;
@@ -39,10 +38,10 @@ public class ShiroConfig {
private Logger logger = org.slf4j.LoggerFactory.getLogger(getClass());
@Bean
public ShiroFilterFactoryBean shiroFilter(@Qualifier("authRealm")AuthRealm authRealm) {
SecurityManager manager= securityManager(authRealm);
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
//SecurityManager manager= securityManager(authRealm);
ShiroFilterFactoryBean bean=new ShiroFilterFactoryBean();
bean.setSecurityManager(manager);
bean.setSecurityManager(securityManager);
//配置登录的url和登录成功的url
bean.setLoginUrl("/login");
bean.setSuccessUrl("/index");
@@ -86,16 +85,11 @@ public class ShiroConfig {
return bean;
}
/* @Bean
public AuthRealm authRealm(){
AuthRealm authRealm=new AuthRealm();
authRealm.setCacheManager(getEhCacheManager());
return authRealm;
}*/
//配置核心安全事务管理器
@Bean
public SecurityManager securityManager(@Qualifier("authRealm")AuthRealm authRealm) {
public SecurityManager securityManager(@Qualifier("authRealm")AuthRealm authRealm,@Qualifier("redisCacheManager")CacheManager
cacheManager) {
logger.info("--------------shiro已经加载----------------");
DefaultWebSecurityManager manager=new DefaultWebSecurityManager();
@@ -104,7 +98,7 @@ public class ShiroConfig {
//注入缓存管理器;
//注意:开发时请先关闭,如不关闭热启动会报错
manager.setCacheManager(getEhCacheManager());//这个如果执行多次,也是同样的一个对象;
manager.setCacheManager(cacheManager);//这个如果执行多次,也是同样的一个对象;
//注入记住我管理器;
manager.setRememberMeManager(rememberMeManager());
@@ -121,14 +115,9 @@ public class ShiroConfig {
* @return
*/
@Bean
public EhCacheManager getEhCacheManager() {
logger.info("--------------ehCacheManager init---------------");
EhCacheManager cacheManager = new EhCacheManager();
cacheManager.setCacheManagerConfigFile("classpath:cache/ehcache-shiro.xml");
logger.info("--------------ehCacheManager init---------------"+cacheManager);
return cacheManager;
}
/**
* cookie对象;
@@ -178,10 +167,10 @@ public class ShiroConfig {
return creator;
}
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(@Qualifier("authRealm")AuthRealm authRealm) {
SecurityManager manager= securityManager(authRealm);
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
// SecurityManager manager= securityManager(authRealm);
AuthorizationAttributeSourceAdvisor advisor=new AuthorizationAttributeSourceAdvisor();
advisor.setSecurityManager(manager);
advisor.setSecurityManager(securityManager);
return advisor;
}
}
@@ -1,130 +0,0 @@
spring:
application:
name: slife
aop:
proxy-target-class: true
freemarker:
template-loader-path: classpath:/templates/
prefer-file-system-access: false
settings:
template_update_delay: 0
classic_compatible: true
number_format: 0.######
template_exception_handler: ignore
request-context-attribute: rc
charset: UTF-8
redis:
database: 0
host: 10.10.20.100
port: 6379
password: 123456
pool:
max-active: 8
max-wait: -1
max-idle: 18
min-idle: 0
timeout: 0
sitemesh:
contentPath: /*
decoratorPath: classpath:/layouts/default.jsp
excludedPaths: /js/*,/assets/*,/css/*
server:
port: 8081
datasource:
type: com.alibaba.druid.pool.DruidDataSource
readSize: 2
writedatasource:
url: jdbc:mysql://139.159.224.82:3306/slife?useUnicode=true&characterEncoding=utf8&useSSL=false
driverClass: com.mysql.jdbc.Driver
username: root
password: chen@123
initialSize: 1
minIdle: 1
maxActive: 20
testOnBorrow: true
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall
#connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
useGlobalDataSourceStat: true
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
typeAliasesPackage: com.slife.entity
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.slife.entity
readdatasource01:
url: jdbc:mysql://139.159.224.82:3306/slife?useUnicode=true&characterEncoding=utf8&useSSL=false
driverClass: com.mysql.jdbc.Driver
username: root
password: chen@123
initialSize: 1
minIdle: 1
maxActive: 20
testOnBorrow: true
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall
#connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
useGlobalDataSourceStat: true
readdatasource02:
url: jdbc:mysql://139.159.224.82:3306/slife?useUnicode=true&characterEncoding=utf8&useSSL=false
driverClass: com.mysql.jdbc.Driver
username: root
password: chen@123
initialSize: 1
minIdle: 1
maxActive: 20
testOnBorrow: true
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall
#connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
useGlobalDataSourceStat: true
swagger:
title: spring-boot-starter-swagger
description: Starterforswagger 2.x
version: 1.1.0.RELEASE
license: ApacheLicense,Version2.0
licenseUrl: https://www.apache.org/licenses/LICENSE-2.0.html
termsOfServiceUrl: https://github.com/dyc87112/spring-boot-starter-swagger
contact:
name: 呵呵
url: http://blog.didispace.com
eamil: 1111@qq.com
base-package: com.slife.controller
base-path: /**
exclude-path: /error, /ops/**
+5 -31
View File
@@ -1,6 +1,9 @@
spring:
application:
name: slife
profiles:
active: dev
aop:
proxy-target-class: true
freemarker:
@@ -14,15 +17,9 @@ spring:
request-context-attribute: rc
charset: UTF-8
boot:
admin:
url: http://localhost:8002
client:
enabled: true
redis:
database: 0
host: 127.0.0.1
host: 119.29.53.182
port: 6379
password: 123456
pool:
@@ -32,42 +29,19 @@ spring:
min-idle: 0
timeout: 0
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/slife?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
druid:
validationQuery: SELECT 1
initialSize: 10
minIdle: 10
maxActive: 200
minEvictableIdleTimeMillis: 180000
testOnBorrow: false
testWhileIdle: true
removeAbandoned: true
removeAbandonedTimeout: 1800
logAbandoned: true
poolPreparedStatements: true
maxOpenPreparedStatements: 100
sitemesh:
contentPath: /*
decoratorPath: classpath:/layouts/default.jsp
excludedPaths: /js/*,/assets/*,/css/*
server:
port: 8081
management:
security:
enabled: false
logging:
file: "logs/slife.log"
logging.level.project.user.UserClient: DEBUG
mybatis:
+7 -2
View File
@@ -5,7 +5,7 @@
user.home – 用户主目录
user.dir – 用户当前工作目录
java.io.tmpdir – 默认临时文件路径 -->
<diskStore path="java.io.tmpdir/slife/shiro" />
<diskStore path="D:/test/ehcache" />
<cacheManagerEventListenerFactory class="" properties="" />
<!--缺省缓存配置。CacheManager 会把这些配置应用到程序中。
下列属性是 defaultCache 必须的:
@@ -17,5 +17,10 @@
timeToLiveSeconds - 缓存创建之后,到达该时间(秒)缓存自动销毁
overflowToDisk - 当缓存中的数据达到最大值时,是否把缓存数据写入磁盘.
-->
<defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="false" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" />
<cache name="books"
maxElementsInMemory="50000"
timeToLiveSeconds="25">
</cache>
<defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="20" timeToLiveSeconds="25"
overflowToDisk="false" diskPersistent="false" diskExpiryThreadIntervalSeconds="20" />
</ehcache>
@@ -18,32 +18,32 @@
<meta http-equiv="refresh" content="0;ie.html"/>
<![endif]-->
<sitemesh:write property='head'/>
<link rel="shortcut icon" href="${base}/favicon.ico">
<link href="${base}/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="${base}/css/font-awesome.min.css?v=4.4.0" rel="stylesheet"/>
<link href="${base}/css/animate.css" rel="stylesheet"/>
<link href="${base}/css/style.css?v=4.1.0" rel="stylesheet"/>
<link href="${base}/css/slife.css" rel="stylesheet"/>
<link rel="shortcut icon" href="${rc.contextPath}/favicon.ico">
<link href="${rc.contextPath}/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="${rc.contextPath}/css/font-awesome.min.css?v=4.4.0" rel="stylesheet"/>
<link href="${rc.contextPath}/css/animate.css" rel="stylesheet"/>
<link href="${rc.contextPath}/css/style.css?v=4.1.0" rel="stylesheet"/>
<link href="${rc.contextPath}/css/slife.css" rel="stylesheet"/>
<script src="${base}/js/jquery.min.js?v=2.1.4"></script>
<script src="${base}/js/bootstrap.min.js?v=3.3.6"></script>
<script src="${rc.contextPath}/js/jquery.min.js?v=2.1.4"></script>
<script src="${rc.contextPath}/js/bootstrap.min.js?v=3.3.6"></script>
<script src="${base}/js/plugins/metisMenu/jquery.metisMenu.js"></script>
<script src="${base}/js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
<script src="${base}/js/plugins/layer/layer.min.js"></script>
<script src="${rc.contextPath}/js/plugins/metisMenu/jquery.metisMenu.js"></script>
<script src="${rc.contextPath}/js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
<script src="${rc.contextPath}/js/plugins/layer/layer.min.js"></script>
<script src="${base}/js/hplus.js?v=4.1.0"></script>
<script type="text/javascript" src="${base}/js/contabs.js"></script>
<script src="${rc.contextPath}/js/hplus.js?v=4.1.0"></script>
<script type="text/javascript" src="${rc.contextPath}/js/contabs.js"></script>
<script src="${base}/js/websocket/sockjs.min.js" type="text/javascript"></script>
<script src="${base}/js/websocket/stomp.min.js" type="text/javascript"></script>
<script src="${base}/js/websocket/sliescoket.js" type="text/javascript"></script>
<script src="${rc.contextPath}/js/websocket/sockjs.min.js" type="text/javascript"></script>
<script src="${rc.contextPath}/js/websocket/stomp.min.js" type="text/javascript"></script>
<script src="${rc.contextPath}/js/websocket/sliescoket.js" type="text/javascript"></script>
<script>
var slifebase="${base}";
var slifebase="${rc.contextPath}";
</script>
<script src="${base}/js/plugins/pace/pace.min.js"></script>
<script src="${base}/js/slife/slife.js"></script>
<script src="${rc.contextPath}/js/plugins/pace/pace.min.js"></script>
<script src="${rc.contextPath}/js/slife/slife.js"></script>
</head>
<body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden">
@@ -60,7 +60,7 @@
<li class="nav-header">
<div class="dropdown profile-element">
<span>
<img alt="image" class="img-circle" src="${base}/img/log9.png"/>
<img alt="image" class="img-circle" style="max-width: 50px" src="${rc.contextPath}${slife.photo}"/>
</span>
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
<span class="clear">
@@ -77,7 +77,7 @@
<li><a class="J_menuItem" href="contacts.html">联系我们</a></li>
<li><a class="J_menuItem" href="mailbox.html" id="connect">信箱</a></li>
<li class="divider"></li>
<li><a href="${base}/logout">安全退出</a></li>
<li><a href="${rc.contextPath}/logout">安全退出</a></li>
</ul>
</div>
<div class="logo-element">Slife</div>
@@ -86,30 +86,28 @@
<#if menus??>
<#else>
<script>location.href = '${base}/login'</script>
<script>location.href = '${rc.contextPath}/login'</script>
</#if>
<#list menus as menu>
<#if "/index"?starts_with(menu.href)>
<li class="${menu.href?starts_with(url)?string('active','')}">
<a href="${base}${menu.href}"><i class="${menu.icon}"></i><span
<#if "/index"?contains(menu.href)>
<li class="${"${rc.requestUri}"?contains(menu.href)?string('active','')}">
<a href="${rc.contextPath}${menu.href}"><i class="${menu.icon}"></i><span
class="title nav-label">${menu.name}</span><span class="selected"></span></a>
</li>
<#else>
<li class="${url?starts_with(menu.href)?string('active open','')}">
<li class="${"${rc.requestUri}"?contains(menu.href)?string('active open','')}">
<a href="javascript:void(0);"><i class="${menu.icon}"></i><span
class="title">${menu.name}</span>
<#if menu.href?starts_with(url)>
<#if menu.href?ends_with("${rc.requestUri}")>
<span class='selected'></span>
</#if>
<span class="arrow ${menu.href?starts_with(url)?string('open','')}"></span> <span
class="fa arrow">
</a>
<span class="arrow ${menu.href?ends_with("${rc.requestUri}")?string('open','')}"></span> <span class="fa arrow"></span></a>
<ul class='nav nav-second-level'>
<#list menu.children as ch >
<li class="${url?contains(ch.href)?string('active','')}">
<a href="${base}${ch.href}"><i class="${ch.icon}"></i>${ch.name}</a>
<li class="${"${rc.requestUri}"?contains(ch.href)?string('active','')}">
<a href="${rc.contextPath}${ch.href}"><i class="${ch.icon}"></i>${ch.name}</a>
</li>
</#list>
</ul>
@@ -215,7 +213,7 @@
class="fa fa-tasks"></i> 主题
</a></li>
<li class="dropdown hidden-xs">
<a href="${base}/logout" class="right-sidebar-toggle" aria-expanded="false"> <i
<a href="${rc.contextPath}/logout" class="right-sidebar-toggle" aria-expanded="false"> <i
class="fa fa-tasks"></i> 退出</a>
</li>
</ul>
@@ -363,12 +361,8 @@
console.log("===========================");
console.log(window.location.href);
if (typeof console == "object") {
/* if($.browser.safari){
console.info("%c SB 的 life ","color: #0677c8; font-size: 18px; font-family: 'Helvetica-Neue', Helvetica, Arial, sans-serif;");
}else{*/
console.info("SB 的 life ");
console.info("系统博客地址 http://guan2ye.com");
/* }*/
console.info("邦客 app");
}
</script>