登录 首页面板 日程管理 个人便签 通讯录 请假记录 会议室管理 预约记录 员工管理 部门管理 角色管理 菜单管理 岗位管理 公告管理 工作时间管理 文件管理 流程审批管理 审批记录 日志管理 考勤记录 考勤统计
一个办公企业管理OA系统
SpringBoot框架
Mysql数据库
activiti
shiro
thymeleaf(前端)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="databaseSchemaUpdate" value="true" />
<property name="jobExecutorActivate" value="false" />
<property name="transactionManager" ref="transactionManager"/>
<property name="activityFontName" value="宋体"/>
<property name="labelFontName" value="宋体"/>
bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration"/>
bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/oa"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
bean>
beans>
/**
* 登录验证reaml
*/
@Component("uReaml")
public class UserRealm extends AuthorizingRealm{
private final static Logger logger = LoggerFactory.getLogger(UserRealm.class);
@Autowired
IUserService loginService;
/**
*
* @描述: 登陆认证
*
* @params:
* @return:
*/
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken authenticationToken) throws AuthenticationException
{
//拿到封装好账户密码的token
UsernamePasswordToken u_pTaken = (UsernamePasswordToken) authenticationToken;
String loginName = u_pTaken.getUsername();
//用户校验
User user = loginService.login(loginName);
if (user == null)
{
throw new UnknownAccountException("用户不存在!");
}
String status = user.getStatus().toString();
if (status.equals(CsEnum.user.USER_USER_BLOCKED.getValue()))
{
throw new LockedAccountException("用户被锁定!");
}
/** 用户存在密码交给 realm 比对
* 1).principal: 认证的实体信息,可以使username 也可以是数据表对应的用户实体类对象
* 2).credentials: 密码
* 3).realmName: 当前reaml 对象的name. 丢奥用父类的getName() 方法即可
**/
/** 数据库的密码是进行过MD5盐值加密的,表单传过来的密码 进行md5加密后对比
*hashAlgorithmName
**/
//加盐 计算盐值 保证每个加密后的 MD5 不一样
ByteSource credentialsSalt = ByteSource.Util.bytes(user.getUid());
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPwd(), credentialsSalt,
this.getName());
return info;
}
/**
* 授权逻辑
**/
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection)
{
//1.从PrincipalCollection 中获取登陆用户的信息,获取登陆者的id
User principal = (User) principalCollection.getPrimaryPrincipal();
//2.利用当前用户的信息用户当前用户的角色或权限
Set<String> roles = new HashSet<>();
Set<String> menus = new HashSet<>();
//从用户中取出权限
Role role = principal.getRole();
List<Permission> permissionList = role.getPermissionList();
if (permissionList != null)
{
for (Permission p : permissionList)
{
if (p.getCode() != null && !p.getCode().equals(""))
{
menus.add(p.getCode());
}
}
}
roles.add(role.getRoleName());
logger.info("### 登录授权,用户=[{}],角色=[{}]", principal.getName(), role.getRoleName());
//3.创建 SimpleAuthenticationInfo 对象,设置角色
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.setRoles(roles);
info.setStringPermissions(menus);
return info;
}
/**
* 清理缓存权限
*/
public void clearCachedAuthorizationInfo()
{
this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());
}
}
创建数据库, 然后修改数据库连接相关信息。
启动 Springboot 类的main方法
访问地址:http://localhost:8880/oa
管理员 账号:admin 密码:admin
领导角色演示账号/密码:manager/123456
员工角色演示账号/密码:employee/123456