diff --git a/new_intall_20180225.sql b/new_intall_20180226.sql
similarity index 86%
rename from new_intall_20180225.sql
rename to new_intall_20180226.sql
index 32bac40fa..1e38e73ac 100644
--- a/new_intall_20180225.sql
+++ b/new_intall_20180226.sql
@@ -14,9 +14,9 @@ create table sys_dept (
-- ----------------------------
-- 初始化-部门表数据
-- ----------------------------
-insert into sys_dept values('1', '0', '研发部', '1', '0');
-insert into sys_dept values('2', '0', '测试部', '2', '0');
-insert into sys_dept values('3', '0', '市场部', '3', '0');
+insert into sys_dept values('1', '0', '研发部门', '1', '0');
+insert into sys_dept values('2', '0', '测试部门', '2', '0');
+insert into sys_dept values('3', '0', '市场部门', '3', '0');
insert into sys_dept values('4', '1', '研发一部', '1', '0');
insert into sys_dept values('5', '1', '研发二部', '2', '0');
@@ -61,6 +61,7 @@ drop table if exists sys_role;
create table sys_role (
role_id int(10) not null auto_increment comment '角色ID',
role_name varchar(30) not null comment '角色名',
+ role_key varchar(100) not null comment '角色权限字符串',
status int(1) default 0 comment '角色状态:0正常,1禁用',
create_time varchar(30) default null comment '创建时间',
update_time varchar(30) default null comment '更新时间',
@@ -72,8 +73,8 @@ create table sys_role (
-- ----------------------------
-- 初始化-角色信息表数据
-- ----------------------------
-insert into sys_role values('1', '管理员', 0, '2018-01-01', '', 'system', '管理员');
-insert into sys_role values('2', '普通角色', 0, '2018-01-01', '', 'system', '普通角色');
+insert into sys_role values('1', '管理员', 'admin', 0, '2018-01-01', '', 'system', '管理员');
+insert into sys_role values('2', '普通角色', 'common', 0, '2018-01-01', '', 'system', '普通角色');
@@ -89,7 +90,7 @@ create table sys_menu (
url varchar(200) default '' comment '菜单URL',
menu_type char(1) default '' comment '类型:M目录,C菜单,F按钮',
visible int(1) default 0 comment '菜单状态:0显示,1隐藏',
- perms varchar(100) default '' comment '权限字符串',
+ perms varchar(100) default '' comment '菜单权限字符串',
icon varchar(100) default '' comment '菜单图标',
create_time varchar(30) default null comment '创建时间',
update_time varchar(30) default null comment '更新时间',
@@ -102,36 +103,36 @@ create table sys_menu (
-- 初始化-菜单信息表数据
-- ----------------------------
-- 一级菜单
-insert into sys_menu values('1', '系统管理', '0', '1', '#', 'M', '0', 'system', 'fa fa-gear', '2018-01-01', '', 'system', '系统管理目录');
-insert into sys_menu values('2', '系统监控', '0', '2', '#', 'M', '0', 'monitor', 'fa fa-video-camera', '2018-01-01', '', 'system', '系统监控目录');
+insert into sys_menu values('1', '系统管理', '0', '1', '#', 'M', '0', '#', 'fa fa-gear', '2018-01-01', '', 'admin', '系统管理目录');
+insert into sys_menu values('2', '系统监控', '0', '2', '#', 'M', '0', '#', 'fa fa-video-camera', '2018-01-01', '', 'admin', '系统监控目录');
-- 二级菜单
-insert into sys_menu values('3', '用户管理', '1', '1', '/system/user/userList', 'C', '0', 'system:user:list', '#', '2018-01-01', '', 'system', '用户管理菜单');
-insert into sys_menu values('4', '角色管理', '1', '2', '/system/role/roleList', 'C', '0', 'system:role:list', '#', '2018-01-01', '', 'system', '角色管理菜单');
-insert into sys_menu values('5', '菜单管理', '1', '3', '/system/menu/menuList', 'C', '0', 'system:menu:list', '#', '2018-01-01', '', 'system', '菜单管理菜单');
-insert into sys_menu values('6', '操作日志', '1', '4', '/system/operlog/operlogList', 'C', '0', 'system:operlog:list', '#', '2018-01-01', '', 'system', '操作日志菜单');
-insert into sys_menu values('7', '登录日志', '1', '5', '/system/userlog/userlogList', 'C', '0', 'system:userlog:list', '#', '2018-01-01', '', 'system', '登录日志菜单');
-insert into sys_menu values('8', '在线用户', '2', '1', '/monitor/online', 'C', '0', 'monitor:online', '#', '2018-01-01', '', 'system', '在线用户菜单');
-insert into sys_menu values('9', '数据监控', '2', '2', '/monitor/druid/index.html', 'C', '0', 'monitor:druid:list', '#', '2018-01-01', '', 'system', '数据监控菜单');
+insert into sys_menu values('3', '用户管理', '1', '1', '/system/user/userList', 'C', '0', 'system:user:list', '#', '2018-01-01', '', 'admin', '用户管理菜单');
+insert into sys_menu values('4', '角色管理', '1', '2', '/system/role/roleList', 'C', '0', 'system:role:list', '#', '2018-01-01', '', 'admin', '角色管理菜单');
+insert into sys_menu values('5', '菜单管理', '1', '3', '/system/menu/menuList', 'C', '0', 'system:menu:list', '#', '2018-01-01', '', 'admin', '菜单管理菜单');
+insert into sys_menu values('6', '操作日志', '1', '4', '/system/operlog/operlogList', 'C', '0', 'system:operlog:list', '#', '2018-01-01', '', 'admin', '操作日志菜单');
+insert into sys_menu values('7', '登录日志', '1', '5', '/system/userlog/userlogList', 'C', '0', 'system:userlog:list', '#', '2018-01-01', '', 'admin', '登录日志菜单');
+insert into sys_menu values('8', '在线用户', '2', '1', '/monitor/online', 'C', '0', 'monitor:online', '#', '2018-01-01', '', 'admin', '在线用户菜单');
+insert into sys_menu values('9', '数据监控', '2', '2', '/monitor/druid/index.html', 'C', '0', 'monitor:druid:list', '#', '2018-01-01', '', 'admin', '数据监控菜单');
--- 三级用户按钮
-insert into sys_menu values('10', '用户新增', '3', '1', '/system/user/add', 'F', '0', 'sys:user:add', '#', '2018-01-01', '', 'system', '用户管理新增按钮');
-insert into sys_menu values('11', '用户修改', '3', '2', '/system/user/update', 'F', '0', 'sys:user:update', '#', '2018-01-01', '', 'system', '用户管理修改按钮');
-insert into sys_menu values('12', '用户删除', '3', '3', '/system/user/delete', 'F', '0', 'sys:user:delete', '#', '2018-01-01', '', 'system', '用户管理删除按钮');
-insert into sys_menu values('13', '用户查询', '3', '4', '/system/user/select', 'F', '0', 'sys:user:select', '#', '2018-01-01', '', 'system', '用户管理查询按钮');
-insert into sys_menu values('14', '密码修改', '3', '5', '/system/user/pwdUpdate', 'F', '0', 'sys:user:pwdUpdate', '#', '2018-01-01', '', 'system', '用户密码修改按钮');
+insert into sys_menu values('10', '用户新增', '3', '1', '/system/user/add', 'F', '0', 'sys:user:add', '#', '2018-01-01', '', 'admin', '用户管理新增按钮');
+insert into sys_menu values('11', '用户修改', '3', '2', '/system/user/update', 'F', '0', 'sys:user:update', '#', '2018-01-01', '', 'admin', '用户管理修改按钮');
+insert into sys_menu values('12', '用户删除', '3', '3', '/system/user/delete', 'F', '0', 'sys:user:delete', '#', '2018-01-01', '', 'admin', '用户管理删除按钮');
+insert into sys_menu values('13', '用户查询', '3', '4', '/system/user/select', 'F', '0', 'sys:user:select', '#', '2018-01-01', '', 'admin', '用户管理查询按钮');
+insert into sys_menu values('14', '密码修改', '3', '5', '/system/user/pwdUpdate', 'F', '0', 'sys:user:pwdUpdate', '#', '2018-01-01', '', 'admin', '用户密码修改按钮');
--- 三级角色按钮
-insert into sys_menu values('15', '角色新增', '4', '1', '/system/role/add', 'F', '0', 'sys:role:add', '#', '2018-01-01', '', 'system', '角色管理新增按钮');
-insert into sys_menu values('16', '角色修改', '4', '2', '/system/role/update', 'F', '0', 'sys:role:update', '#', '2018-01-01', '', 'system', '角色管理修改按钮');
-insert into sys_menu values('17', '角色删除', '4', '3', '/system/role/delete', 'F', '0', 'sys:role:delete', '#', '2018-01-01', '', 'system', '角色管理删除按钮');
-insert into sys_menu values('18', '角色查询', '4', '4', '/system/role/select', 'F', '0', 'sys:role:select', '#', '2018-01-01', '', 'system', '角色管理查询按钮');
-insert into sys_menu values('19', '角色授权', '4', '5', '/system/role/auth', 'F', '0', 'sys:role:auth', '#', '2018-01-01', '', 'system', '角色管理授权按钮');
+insert into sys_menu values('15', '角色新增', '4', '1', '/system/role/add', 'F', '0', 'sys:role:add', '#', '2018-01-01', '', 'admin', '角色管理新增按钮');
+insert into sys_menu values('16', '角色修改', '4', '2', '/system/role/update', 'F', '0', 'sys:role:update', '#', '2018-01-01', '', 'admin', '角色管理修改按钮');
+insert into sys_menu values('17', '角色删除', '4', '3', '/system/role/delete', 'F', '0', 'sys:role:delete', '#', '2018-01-01', '', 'admin', '角色管理删除按钮');
+insert into sys_menu values('18', '角色查询', '4', '4', '/system/role/select', 'F', '0', 'sys:role:select', '#', '2018-01-01', '', 'admin', '角色管理查询按钮');
+insert into sys_menu values('19', '角色授权', '4', '5', '/system/role/auth', 'F', '0', 'sys:role:auth', '#', '2018-01-01', '', 'admin', '角色管理授权按钮');
--- 三级菜单按钮
-insert into sys_menu values('20', '菜单新增', '5', '1', '/system/menu/add', 'F', '0', 'sys:menu:add', '#', '2018-01-01', '', 'system', '菜单管理新增按钮');
-insert into sys_menu values('21', '菜单修改', '5', '2', '/system/menu/update', 'F', '0', 'sys:menu:update', '#', '2018-01-01', '', 'system', '菜单管理修改按钮');
-insert into sys_menu values('22', '菜单删除', '5', '3', '/system/menu/delete', 'F', '0', 'sys:menu:delete', '#', '2018-01-01', '', 'system', '菜单管理删除按钮');
+insert into sys_menu values('20', '菜单新增', '5', '1', '/system/menu/add', 'F', '0', 'sys:menu:add', '#', '2018-01-01', '', 'admin', '菜单管理新增按钮');
+insert into sys_menu values('21', '菜单修改', '5', '2', '/system/menu/update', 'F', '0', 'sys:menu:update', '#', '2018-01-01', '', 'admin', '菜单管理修改按钮');
+insert into sys_menu values('22', '菜单删除', '5', '3', '/system/menu/delete', 'F', '0', 'sys:menu:delete', '#', '2018-01-01', '', 'admin', '菜单管理删除按钮');
insert into sys_menu values('23', '菜单查询', '5', '4', '/system/menu/select', 'F', '0', 'sys:menu:select', '#', '2018-01-01', '', 'system', '菜单管理查询按钮');
--- 三级日志按钮
-insert into sys_menu values('24', '操作日志查询', '4', '5', '/system/operlog/auth', 'F', '0', 'sys:operlog:select', '#', '2018-01-01', '', 'system', '操作日志查询按钮');
-insert into sys_menu values('25', '登录日志查询', '4', '5', '/system/userlog/auth', 'F', '0', 'sys:userlog:select', '#', '2018-01-01', '', 'system', '登录日志查询按钮');
+insert into sys_menu values('24', '操作日志查询', '4', '5', '/system/operlog/auth', 'F', '0', 'sys:operlog:select', '#', '2018-01-01', '', 'admin', '操作日志查询按钮');
+insert into sys_menu values('25', '登录日志查询', '4', '5', '/system/userlog/auth', 'F', '0', 'sys:userlog:select', '#', '2018-01-01', '', 'admin', '登录日志查询按钮');
-- ----------------------------
@@ -257,7 +258,6 @@ create table sys_user_online (
sessionId varchar(50) default '' comment '用户会话id',
login_name varchar(50) default '' comment '登录名称',
dept_name varchar(50) default '' comment '部门名称',
- role_name varchar(50) default '' comment '角色名称',
ipaddr varchar(50) default '' comment '登录IP地址',
browser varchar(50) default '' comment '浏览器类型',
os varchar(50) default '' comment '操作系统',
@@ -268,8 +268,8 @@ create table sys_user_online (
primary key (sessionId)
) engine=innodb default charset=utf8;
-insert into sys_user_online(sessionId, login_name, dept_name, role_name, ipaddr, browser, os, status)
-values('c3b252c3-2229-4be4-a5f7-7aba4b0c314c', 'admin', '开发部', '管理员', '127.0.0.1', 'Chrome 45', 'Windows 7', 'on_line');
+insert into sys_user_online(sessionId, login_name, dept_name, ipaddr, browser, os, status)
+values('c3b252c3-2229-4be4-a5f7-7aba4b0c314c', 'admin', '开发部', '127.0.0.1', 'Chrome 45', 'Windows 7', 'on_line');
-- 用户部门表
SELECT * FROM sys_dept;
diff --git a/pom.xml b/pom.xml
index 9973a4229..4bf4c8d80 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,8 +9,8 @@
jar
RuoYi
- 云管理系统
-
+ 若依管理系统
+
org.springframework.boot
spring-boot-starter-parent
@@ -22,160 +22,141 @@
UTF-8
UTF-8
1.8
+ 1.3.2
+ 1.2.1
+ 1.1.1
+ 1.2.31
+ 1.0.28
+ 3.6
+ 1.19
+ 1.16.18
1.0.4
1.7
+
+
org.springframework.boot
spring-boot-starter
+
org.springframework.boot
spring-boot-starter-test
test
+
+
org.springframework.boot
spring-boot-starter-aop
-
+
+
org.springframework.boot
spring-boot-starter-web
+
+
org.springframework.boot
spring-boot-starter-thymeleaf
+
+
net.sourceforge.nekohtml
nekohtml
-
+
+
mysql
mysql-connector-java
+
+
org.mybatis.spring.boot
mybatis-spring-boot-starter
- 1.1.1
+ ${mybatis-spring-boot-starter.version}
-
+
+
com.alibaba
druid
- 1.0.28
+ ${druid.version}
-
+
+
org.apache.commons
commons-lang3
- 3.6
+ ${commons.lang3.version}
-
- commons-configuration
- commons-configuration
- 1.10
-
-
- commons-io
- commons-io
- 2.5
-
-
+
+
org.apache.shiro
shiro-core
- 1.3.2
+ ${shiro.version}
+
+
org.apache.shiro
shiro-spring
- 1.3.2
+ ${shiro.version}
-
+
+
org.apache.shiro
shiro-ehcache
- 1.3.2
+ ${shiro.version}
+
+
com.github.theborakompanioni
thymeleaf-extras-shiro
- 1.2.1
+ ${thymeleaf-extras-shiro.version}
-
+
+
com.alibaba
fastjson
- 1.2.31
-
-
-
- org.apache.velocity
- velocity
- 1.7
-
-
-
- org.springframework.boot
- spring-boot-starter-cache
-
-
- net.sf.ehcache
- ehcache
+ ${fastjson.version}
+
eu.bitwalker
UserAgentUtils
- 1.19
+ ${bitwalker.version}
-
+
+
org.projectlombok
lombok
- 1.16.18
+ ${lombok.version}
-
-
- org.quartz-scheduler
- quartz
- 2.2.1
-
-
- slf4j-api
- org.slf4j
-
-
-
+
+
org.springframework
spring-context-support
-
- org.springframework.boot
- spring-boot-devtools
- true
-
-
-
- org.apache.httpcomponents
- httpclient
- 4.4
-
-
-
- org.apache.httpcomponents
- httpcore
- 4.4
-
-
+
+
@@ -187,6 +168,7 @@
+
public
@@ -197,6 +179,7 @@
+
public
@@ -210,4 +193,5 @@
+
diff --git a/src/main/java/com/ruoyi/framework/config/BaseConfig.java b/src/main/java/com/ruoyi/framework/config/BaseConfig.java
index 8508b2143..448983be2 100644
--- a/src/main/java/com/ruoyi/framework/config/BaseConfig.java
+++ b/src/main/java/com/ruoyi/framework/config/BaseConfig.java
@@ -1,5 +1,6 @@
package com.ruoyi.framework.config;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
@@ -13,13 +14,20 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
@Configuration
public class BaseConfig extends WebMvcConfigurerAdapter
{
+
+ /**
+ * 强制退出后重定向的地址
+ */
+ @Value("${shiro.user.indexUrl}")
+ private String indexUrl;
+
/**
* 默认首页的设置,当输入域名是可以自动跳转到默认指定的网页
*/
@Override
public void addViewControllers(ViewControllerRegistry registry)
{
- registry.addViewController("/").setViewName("forward:/index");
+ registry.addViewController("/").setViewName("forward:" + indexUrl);
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
super.addViewControllers(registry);
}
diff --git a/src/main/java/com/ruoyi/framework/config/ShiroConfig.java b/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
index 935b0b836..204f3aa68 100644
--- a/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
+++ b/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
@@ -42,7 +42,15 @@ public class ShiroConfig
// 相隔多久检查一次session的有效性,单位毫秒,默认就是10分钟
@Value("${shiro.session.validationInterval}")
private int validationInterval;
-
+
+ // 登录地址
+ @Value("${shiro.user.loginUrl}")
+ private String loginUrl;
+
+ // 权限认证失败地址
+ @Value("${shiro.user.unauthorizedUrl}")
+ private String unauthorizedUrl;
+
@Autowired
private IMenuService menuService;
@@ -174,12 +182,12 @@ public class ShiroConfig
// Shiro的核心安全接口,这个属性是必须的
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 身份认证失败,则跳转到登录页面的配置
- shiroFilterFactoryBean.setLoginUrl("/login");
+ shiroFilterFactoryBean.setLoginUrl(loginUrl);
// 权限认证失败,则跳转到指定页面
- shiroFilterFactoryBean.setUnauthorizedUrl("/unauth");
+ shiroFilterFactoryBean.setUnauthorizedUrl(unauthorizedUrl);
// 注销成功,则跳转到指定页面
LogoutFilter logoutFilter = new LogoutFilter();
- logoutFilter.setRedirectUrl("/login");
+ logoutFilter.setRedirectUrl(loginUrl);
// Shiro连接约束配置,即过滤链的定义
LinkedHashMap filterChainDefinitionMap = new LinkedHashMap<>();
// 对静态资源设置匿名访问
@@ -219,7 +227,7 @@ public class ShiroConfig
public OnlineSessionFilter onlineSessionFilter()
{
OnlineSessionFilter onlineSessionFilter = new OnlineSessionFilter();
- onlineSessionFilter.setLoginUrl("/login");
+ onlineSessionFilter.setLoginUrl(loginUrl);
return onlineSessionFilter;
}
diff --git a/src/main/java/com/ruoyi/project/shiro/realm/LoginService.java b/src/main/java/com/ruoyi/project/shiro/realm/LoginService.java
index c5a668141..f4a220f57 100644
--- a/src/main/java/com/ruoyi/project/shiro/realm/LoginService.java
+++ b/src/main/java/com/ruoyi/project/shiro/realm/LoginService.java
@@ -3,7 +3,6 @@ package com.ruoyi.project.shiro.realm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
-
import com.ruoyi.framework.constant.CommonConstant;
import com.ruoyi.project.shiro.common.Constants;
import com.ruoyi.project.shiro.common.utils.MessageUtils;
@@ -74,12 +73,6 @@ public class LoginService
throw new UserBlockedException(user.getRefuseDes());
}
- if (Constants.ROLE_BLOCKED.equals(user.getRole().getStatus()))
- {
- SystemLogUtils.log(username, CommonConstant.LOGIN_FAIL, MessageUtils.message("role.blocked", user.getRole().getRemark()));
- throw new RoleBlockedException(user.getRole().getRemark());
- }
-
SystemLogUtils.log(username, CommonConstant.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
return user;
}
diff --git a/src/main/java/com/ruoyi/project/shiro/realm/UserRealm.java b/src/main/java/com/ruoyi/project/shiro/realm/UserRealm.java
index f01eb7d17..d711f1a0b 100644
--- a/src/main/java/com/ruoyi/project/shiro/realm/UserRealm.java
+++ b/src/main/java/com/ruoyi/project/shiro/realm/UserRealm.java
@@ -1,6 +1,5 @@
package com.ruoyi.project.shiro.realm;
-import java.util.Set;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
@@ -15,7 +14,7 @@ import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;
-import com.ruoyi.common.tools.StringTools;
+
import com.ruoyi.common.utils.security.ShiroUtils;
import com.ruoyi.project.shiro.exception.JCaptchaException;
import com.ruoyi.project.shiro.exception.user.RoleBlockedException;
@@ -24,7 +23,9 @@ import com.ruoyi.project.shiro.exception.user.UserNotExistsException;
import com.ruoyi.project.shiro.exception.user.UserPasswordNotMatchException;
import com.ruoyi.project.shiro.exception.user.UserPasswordRetryLimitExceedException;
import com.ruoyi.project.system.menu.service.IMenuService;
+import com.ruoyi.project.system.role.service.IRoleService;
import com.ruoyi.project.system.user.domain.User;
+
import lombok.extern.slf4j.Slf4j;
/**
@@ -38,6 +39,9 @@ public class UserRealm extends AuthorizingRealm
@Autowired
private IMenuService menuService;
+
+ @Autowired
+ private IRoleService roleService;
@Autowired
private LoginService loginService;
@@ -49,13 +53,11 @@ public class UserRealm extends AuthorizingRealm
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0)
{
Long userId = ShiroUtils.getUserId();
- Set perms = menuService.selectPermsByUserId(userId);
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
- if (StringTools.isNotEmpty(perms))
- {
- // // 权限加入AuthorizationInfo认证对象
- info.setStringPermissions(perms);
- }
+ // 角色加入AuthorizationInfo认证对象
+ info.setRoles(roleService.selectRolesByUserId(userId));
+ // 权限加入AuthorizationInfo认证对象
+ info.setStringPermissions(menuService.selectPermsByUserId(userId));
return info;
}
diff --git a/src/main/java/com/ruoyi/project/shiro/session/OnlineSessionDAO.java b/src/main/java/com/ruoyi/project/shiro/session/OnlineSessionDAO.java
index 03d69add9..a588ed586 100644
--- a/src/main/java/com/ruoyi/project/shiro/session/OnlineSessionDAO.java
+++ b/src/main/java/com/ruoyi/project/shiro/session/OnlineSessionDAO.java
@@ -2,13 +2,13 @@ package com.ruoyi.project.shiro.session;
import java.io.Serializable;
import java.util.Date;
+
import javax.servlet.http.HttpServletRequest;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-
import com.ruoyi.project.system.online.domain.OnlineSession;
import com.ruoyi.project.system.online.domain.UserOnline;
import com.ruoyi.project.system.online.service.IUserOnlineService;
diff --git a/src/main/java/com/ruoyi/project/shiro/web/filter/online/OnlineSessionFilter.java b/src/main/java/com/ruoyi/project/shiro/web/filter/online/OnlineSessionFilter.java
index b9eff9f56..92e3f121f 100644
--- a/src/main/java/com/ruoyi/project/shiro/web/filter/online/OnlineSessionFilter.java
+++ b/src/main/java/com/ruoyi/project/shiro/web/filter/online/OnlineSessionFilter.java
@@ -8,29 +8,30 @@ import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.AccessControlFilter;
import org.apache.shiro.web.util.WebUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import com.ruoyi.common.utils.security.ShiroUtils;
import com.ruoyi.project.shiro.ShiroConstants;
import com.ruoyi.project.shiro.session.OnlineSessionDAO;
import com.ruoyi.project.system.online.domain.OnlineSession;
import com.ruoyi.project.system.user.domain.User;
-
+/**
+ * 自定义访问控制
+ * @author yangzz
+ *
+ */
public class OnlineSessionFilter extends AccessControlFilter
{
/**
* 强制退出后重定向的地址
*/
- private String forceLogoutUrl = "/login";
+ @Value("${shiro.user.loginUrl}")
+ private String loginUrl;
@Autowired
private OnlineSessionDAO onlineSessionDAO;
- public String getForceLogoutUrl()
- {
- return forceLogoutUrl;
- }
-
/**
* 表示是否允许访问;mappedValue就是[urls]配置中拦截器参数部分,如果允许访问返回true,否则false;
*/
@@ -58,7 +59,6 @@ public class OnlineSessionFilter extends AccessControlFilter
onlineSession.setUserId(user.getUserId());
onlineSession.setLoginName(user.getLoginName());
onlineSession.setDeptName(user.getDept().getDeptName());
- onlineSession.setRoleName(user.getRole().getRoleName());
onlineSession.markAttributeChanged();
}
}
@@ -90,7 +90,6 @@ public class OnlineSessionFilter extends AccessControlFilter
@Override
protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException
{
- String loginUrl = getForceLogoutUrl();
WebUtils.issueRedirect(request, response, loginUrl);
}
diff --git a/src/main/java/com/ruoyi/project/shiro/web/filter/sync/SyncOnlineSessionFilter.java b/src/main/java/com/ruoyi/project/shiro/web/filter/sync/SyncOnlineSessionFilter.java
index cc640c985..0b4a0f17d 100644
--- a/src/main/java/com/ruoyi/project/shiro/web/filter/sync/SyncOnlineSessionFilter.java
+++ b/src/main/java/com/ruoyi/project/shiro/web/filter/sync/SyncOnlineSessionFilter.java
@@ -31,6 +31,7 @@ public class SyncOnlineSessionFilter extends PathMatchingFilter
{
OnlineSession session = (OnlineSession) request.getAttribute(ShiroConstants.ONLINE_SESSION);
// 如果session stop了 也不同步
+ // session停止时间,如果stopTimestamp不为null,则代表已停止
if (session != null && session.getUserId() != null && session.getStopTimestamp() == null)
{
onlineSessionDAO.syncToDb(session);
diff --git a/src/main/java/com/ruoyi/project/system/menu/dao/IMenuDao.java b/src/main/java/com/ruoyi/project/system/menu/dao/IMenuDao.java
index c325a74d8..880f2c2d1 100644
--- a/src/main/java/com/ruoyi/project/system/menu/dao/IMenuDao.java
+++ b/src/main/java/com/ruoyi/project/system/menu/dao/IMenuDao.java
@@ -4,7 +4,7 @@ import java.util.List;
import com.ruoyi.project.system.menu.domain.Menu;
/**
- * 角色表 数据层
+ * 菜单表 数据层
*
* @author yangzz
*/
diff --git a/src/main/java/com/ruoyi/project/system/menu/dao/MenuDaoImpl.java b/src/main/java/com/ruoyi/project/system/menu/dao/MenuDaoImpl.java
index ca9b38c1d..cf3fa0b29 100644
--- a/src/main/java/com/ruoyi/project/system/menu/dao/MenuDaoImpl.java
+++ b/src/main/java/com/ruoyi/project/system/menu/dao/MenuDaoImpl.java
@@ -6,7 +6,7 @@ import com.ruoyi.framework.core.dao.DynamicObjectBaseDao;
import com.ruoyi.project.system.menu.domain.Menu;
/**
- * 用户 数据层处理
+ * 菜单 数据层处理
*
* @author yangzz
*/
diff --git a/src/main/java/com/ruoyi/project/system/menu/service/MenuServiceImpl.java b/src/main/java/com/ruoyi/project/system/menu/service/MenuServiceImpl.java
index 963bd592c..c1f7d316e 100644
--- a/src/main/java/com/ruoyi/project/system/menu/service/MenuServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/system/menu/service/MenuServiceImpl.java
@@ -17,7 +17,7 @@ import com.ruoyi.project.system.menu.domain.Menu;
import com.ruoyi.project.util.TreeUtil;
/**
- * 用户 业务层处理
+ * 菜单 业务层处理
*
* @author yangzz
*/
diff --git a/src/main/java/com/ruoyi/project/system/online/domain/OnlineSession.java b/src/main/java/com/ruoyi/project/system/online/domain/OnlineSession.java
index 897424477..f20e85034 100644
--- a/src/main/java/com/ruoyi/project/system/online/domain/OnlineSession.java
+++ b/src/main/java/com/ruoyi/project/system/online/domain/OnlineSession.java
@@ -19,9 +19,6 @@ public class OnlineSession extends SimpleSession
// 部门名称
private String deptName;
- // 角色名称
- private String roleName;
-
// 登录IP地址
private String host;
@@ -99,16 +96,6 @@ public class OnlineSession extends SimpleSession
this.deptName = deptName;
}
- public String getRoleName()
- {
- return roleName;
- }
-
- public void setRoleName(String roleName)
- {
- this.roleName = roleName;
- }
-
public OnlineStatus getStatus()
{
return status;
diff --git a/src/main/java/com/ruoyi/project/system/online/domain/UserOnline.java b/src/main/java/com/ruoyi/project/system/online/domain/UserOnline.java
index a80e0c254..ef8ed703e 100644
--- a/src/main/java/com/ruoyi/project/system/online/domain/UserOnline.java
+++ b/src/main/java/com/ruoyi/project/system/online/domain/UserOnline.java
@@ -21,9 +21,6 @@ public class UserOnline
// 登录名称
private String loginName;
- // 角色名称
- private String roleName;
-
// 登录IP地址
private String ipaddr;
@@ -57,7 +54,6 @@ public class UserOnline
online.setSessionId(String.valueOf(session.getId()));
online.setDeptName(session.getDeptName());
online.setLoginName(session.getLoginName());
- online.setRoleName(session.getRoleName());
online.setStartTimestamp(session.getStartTimestamp());
online.setLastAccessTime(session.getLastAccessTime());
online.setExpireTime(session.getTimeout());
diff --git a/src/main/java/com/ruoyi/project/system/role/dao/IRoleDao.java b/src/main/java/com/ruoyi/project/system/role/dao/IRoleDao.java
new file mode 100644
index 000000000..220343aea
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/system/role/dao/IRoleDao.java
@@ -0,0 +1,21 @@
+package com.ruoyi.project.system.role.dao;
+
+import java.util.List;
+
+/**
+ * 角色表 数据层
+ *
+ * @author yangzz
+ */
+public interface IRoleDao
+{
+
+ /**
+ * 根据用户ID查询角色
+ *
+ * @param userId 用户ID
+ * @return 角色列表
+ */
+ public List selectRolesByUserId(Long userId);
+
+}
diff --git a/src/main/java/com/ruoyi/project/system/role/dao/RoleDaoImpl.java b/src/main/java/com/ruoyi/project/system/role/dao/RoleDaoImpl.java
new file mode 100644
index 000000000..68ebcdfbc
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/system/role/dao/RoleDaoImpl.java
@@ -0,0 +1,39 @@
+package com.ruoyi.project.system.role.dao;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import com.ruoyi.framework.core.dao.DynamicObjectBaseDao;
+
+/**
+ * 角色 数据层处理
+ *
+ * @author yangzz
+ */
+@Repository("roleDao")
+public class RoleDaoImpl extends DynamicObjectBaseDao implements IRoleDao
+{
+
+ /**
+ * 根据用户ID查询角色
+ *
+ * @param userId 用户ID
+ * @return 角色列表
+ */
+ @Override
+ public List selectRolesByUserId(Long userId)
+ {
+ List permsList = null;
+ try
+ {
+ permsList = this.findForList("SystemRoleMapper.selectRolesByUserId", userId);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return permsList;
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/project/system/role/service/IRoleService.java b/src/main/java/com/ruoyi/project/system/role/service/IRoleService.java
new file mode 100644
index 000000000..f1059903b
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/system/role/service/IRoleService.java
@@ -0,0 +1,21 @@
+package com.ruoyi.project.system.role.service;
+
+import java.util.Set;
+
+/**
+ * 角色业务层
+ *
+ * @author yangzz
+ */
+public interface IRoleService
+{
+
+ /**
+ * 根据用户ID查询角色
+ *
+ * @param userId 用户ID
+ * @return 权限列表
+ */
+ public Set selectRolesByUserId(Long userId);
+
+}
diff --git a/src/main/java/com/ruoyi/project/system/role/service/RoleServiceImpl.java b/src/main/java/com/ruoyi/project/system/role/service/RoleServiceImpl.java
new file mode 100644
index 000000000..92af8bd47
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/system/role/service/RoleServiceImpl.java
@@ -0,0 +1,45 @@
+package com.ruoyi.project.system.role.service;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.system.role.dao.IRoleDao;
+
+/**
+ * 角色 业务层处理
+ *
+ * @author yangzz
+ */
+@Service("roleService")
+public class RoleServiceImpl implements IRoleService
+{
+
+ @Autowired
+ private IRoleDao roleDao;
+
+ /**
+ * 根据用户ID查询权限
+ *
+ * @param userId 用户ID
+ * @return 权限列表
+ */
+ @Override
+ public Set selectRolesByUserId(Long userId)
+ {
+ List perms = roleDao.selectRolesByUserId(userId);
+ Set permsSet = new HashSet<>();
+ for (String perm : perms)
+ {
+ if (StringUtils.isNotBlank(perm))
+ {
+ permsSet.addAll(Arrays.asList(perm.trim().split(",")));
+ }
+ }
+ return permsSet;
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/project/system/user/domain/User.java b/src/main/java/com/ruoyi/project/system/user/domain/User.java
index 484b9ec12..d9021316a 100644
--- a/src/main/java/com/ruoyi/project/system/user/domain/User.java
+++ b/src/main/java/com/ruoyi/project/system/user/domain/User.java
@@ -1,7 +1,6 @@
package com.ruoyi.project.system.user.domain;
import com.ruoyi.project.system.dept.domain.Dept;
-import com.ruoyi.project.system.role.domain.Role;
import lombok.Data;
/**
@@ -36,7 +35,5 @@ public class User
private String createTime;
// 部门对象
private Dept dept;
- // 角色对象
- private Role role;
}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 72b904aad..aa4131b72 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -35,6 +35,13 @@ mybatis:
configLocation: classpath:mybatis/mybatis-config.xml
# Shiro
shiro:
+ user:
+ # 登录地址
+ loginUrl: /login
+ # 权限认证失败地址
+ unauthorizedUrl: /unauth
+ # 首页地址
+ indexUrl: /index
session:
# Session超时时间(默认30分钟)
expireTime: 30
diff --git a/src/main/resources/mybatis/system/SystemOnlineMapper.xml b/src/main/resources/mybatis/system/SystemOnlineMapper.xml
index 92dd1d419..d01564321 100644
--- a/src/main/resources/mybatis/system/SystemOnlineMapper.xml
+++ b/src/main/resources/mybatis/system/SystemOnlineMapper.xml
@@ -8,7 +8,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
@@ -33,8 +32,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- replace into sys_user_online(sessionId, login_name, dept_name, role_name, ipaddr, browser, os, status, start_timestsamp, last_access_time, expireTime)
- values (#{sessionId}, #{loginName}, #{deptName}, #{roleName}, #{ipaddr}, #{browser}, #{os}, #{status}, #{startTimestamp}, #{lastAccessTime}, #{expireTime})
+ replace into sys_user_online(sessionId, login_name, dept_name, ipaddr, browser, os, status, start_timestsamp, last_access_time, expireTime)
+ values (#{sessionId}, #{loginName}, #{deptName}, #{ipaddr}, #{browser}, #{os}, #{status}, #{startTimestamp}, #{lastAccessTime}, #{expireTime})
diff --git a/src/main/resources/mybatis/system/SystemRoleMapper.xml b/src/main/resources/mybatis/system/SystemRoleMapper.xml
new file mode 100644
index 000000000..df91d437e
--- /dev/null
+++ b/src/main/resources/mybatis/system/SystemRoleMapper.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mybatis/system/SystemUserMapper.xml b/src/main/resources/mybatis/system/SystemUserMapper.xml
index e13035d03..5e500c34e 100644
--- a/src/main/resources/mybatis/system/SystemUserMapper.xml
+++ b/src/main/resources/mybatis/system/SystemUserMapper.xml
@@ -17,7 +17,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
@@ -28,30 +27,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index 1a975ad1a..d36944b14 100644
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -32,7 +32,7 @@
RuoYi
- 超级管理员
+ 研发部