• SpringBoot OA办公系统


    SpringBoot OA办公系统

    SpringBoot OA办公系统功能介绍

    登录 首页面板 日程管理 个人便签 通讯录 请假记录 会议室管理 预约记录 员工管理 部门管理 角色管理 菜单管理 岗位管理 公告管理 工作时间管理 文件管理 流程审批管理 审批记录 日志管理 考勤记录 考勤统计

    一个办公企业管理OA系统

    使用技术
    • SpringBoot框架

    • Mysql数据库

    • activiti

    • shiro

    • thymeleaf(前端)

    功能展示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    activiti.cf.xml配置文件
    
    
    <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>
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    UserRealm权限代码

    /**
     * 登录验证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());
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    运行

    创建数据库, 然后修改数据库连接相关信息。

    启动 Springboot 类的main方法

    访问地址:http://localhost:8880/oa

    管理员 账号:admin 密码:admin

    领导角色演示账号/密码:manager/123456

    员工角色演示账号/密码:employee/123456

  • 相关阅读:
    Java实现图片和Base64之间的相互转化
    Mac Git 如何设置ssh key
    Linux文本三剑客之sed流编辑器
    [附源码]Python计算机毕业设计Django财务管理系统
    Vue(一)——Vue核心
    同态加密库Seal库的安装(win11+VS2022)
    《最新出炉》系列初窥篇-Python+Playwright自动化测试-25-处理单选和多选按钮-中篇
    【毕业项目】 云备份
    2.3线性表的链式表示
    算法--分隔链表(Kotlin)
  • 原文地址:https://blog.csdn.net/yinjl123/article/details/126822866