微人事第十天:Spring Security加密

在之前的博客中我们对于登陆的密码都是不加密的,现在为了安全起见,我们需要将密码由明文加密成为密文。

密码加密我们一般会用到散列函数,又称散列算法、哈希函数,这是一种从任何数据中创建数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来,然后将数据打乱混合,重新创建一个散列值。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。我们常用的散列函数有 MD5 消息摘要算法、安全散列算法(Secure Hash Algorithm)。

但是仅仅使用散列函数还不够,为了增加密码的安全性,一般在密码加密过程中还需要加盐,所谓的盐可以是一个随机数也可以是用户名,加盐之后,即使密码明文相同的用户生成的密码密文也不相同,这可以极大的提高密码的安全性。但是传统的加盐方式需要在数据库中有专门的字段来记录盐值,这个字段可能是用户名字段(因为用户名唯一),也可能是一个专门记录盐值的字段,这样的配置比较繁琐。

Spring Security 提供了多种密码加密方案,官方推荐使用 BCryptPasswordEncoder,BCryptPasswordEncoder 使用 BCrypt 强哈希函数,开发者在使用时可以选择提供 strength 和 SecureRandom 实例。strength 越大,密钥的迭代次数越多,密钥迭代次数为 2^strength。strength 取值在 4~31 之间,默认为 10。

不同于 Shiro 中需要自己处理密码加盐,在 Spring Security 中,BCryptPasswordEncoder 就自带了盐,处理起来非常方便。

操作流程:
在配置类中添加Bean,返回BCryptPasswordEncoder对象

@Bean
    PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

在测试类中将密码123加密10次,每一次的密文都是不一样的

package org.javaboy.security;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@SpringBootTest
class SecurityApplicationTests {

    @Test
    void contextLoads() {
        for (int i = 0; i < 10; i++) {
            BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
            System.out.println(encoder.encode("123"));
        }
    }

}

打印出的密码选出其中几个黏贴到配置类中:

 @Autowired
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("javaboy").password("$2a$10$/kEv.secGR.i.M.EsXujH.dssxbYwjsr2LAeW2Gkt0VQlxwiEkXL2").roles("admin")
                .and()
                .withUser("江南一点雨").password("$2a$10$JfWIkzViqNmvF/tBnNmfPeMz3gjJ9RKiWWRLciJGO1L3pW7PGNTFi").roles("user");
    }

这里两个密码虽然不一样但是加密之前的明文都是123,现在测试:
在这里插入图片描述
访问成功,加密生效
在这里插入图片描述

<think>好的,我现在需要处理用户的请求:介绍基于Java企业人事管理系统的研究与设计文献。首先,我需要理解用户的需求是什么。用户可能是在进行学术研究,比如撰写论文,或者是在开发这样的系统,想要了解现有的文献和研究方向。 用户提到的是“研究与设计文献”,所以重点应该放在现有的研究成果、系统设计的关键技术、常用架构以及可能面临的挑战上。同时,用户可能希望了解如何结构这样的文献,或者有哪些值得关注的方面。 接下来,我需要考虑Java企业级应用常用的技术栈,比如Spring Boot、MyBatis、Spring Security等,这些通常是这类系统的核心技术。数据库方面,MySQL、Oracle是常见的选择,可能还需要提到数据库设计中的表结构,比如员工表、部门表、薪资表等。 系统架构方面,分层设计(表现层、业务逻辑层、数据访问层)是基础,可能需要解释每层的职责。此外,服务架构和前后端分离也是现代系统的趋势,应该包括进去。 然后,用户可能关心系统的功能模块。人事管理系统通常包括员工信息管理、考勤、薪资、招聘、培训、绩效、统计报表等模块。需要逐一简要说明每个模块的功能。 在安全性方面,权限管理和数据加密是关键点,比如使用RBAC模型,SSL传输加密等。这部分需要强调其重要性,特别是在处理敏感人事数据时。 研究热点和挑战方面,可以提到数字化转型、大数据分析、AI集成,以及高并发、系统扩展性、数据一致性等问题。这些内容能帮助用户了解当前的研究趋势和待解决的问题。 参考文献部分,需要推荐一些权威的书籍,比如《Spring实战》、《企业应用架构模式》等,这为用户提供了进一步阅读的方向。 同时,要确保回答符合之前的系统级指令:数学公式的正确使用,中文字符,结构清晰。但检查后发现内容中没有涉及数学公式,所以不需要调整格式。结构上分点列出,符合用户要求的清晰结构。 最后,确认回答是否解决了用户的潜在需求,比如是否覆盖了设计的关键技术、架构、功能模块和研究方向。可能用户还需要具体的文献名称或作者,但考虑到版权问题,推荐经典书籍和通用研究方向更为合适。</think>以下是对“基于Java企业人事管理系统的研究与设计”文献的解析框架及核心内容,供学术研究参考: --- ### 一、系统设计背景与目标 1. **背景分析** - 传统人事管理存在效率低、数据孤岛、流程冗余等问题 - Java EE技术栈在跨平台、安全性、可扩展性方面的优势 - 符合企业数字化转型需求(如:$T_{\text{开发周期}}$缩短,$C_{\text{维护成本}}$降低) 2. **核心目标** - 实现员工信息全生命周期管理 - 构建模块化、高内聚低耦合的系统架构 - 支持多维度数据分析与决策支持 --- ### 二、关键技术选型 1. **开发框架** - **Spring Boot**:简化配置,依赖注入(如:`@Autowired`注解实现Bean管理) - **MyBatis**:ORM映射,SQL与代码解耦(例如:`<select id="getEmployeeById">`) - **Spring Security**:基于角色的访问控制(RBAC模型) 2. **数据库设计** - 使用MySQL/Oracle,遵循第三范式(3NF) - 核心表结构示例: ```sql CREATE TABLE employee ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, dept_id INT REFERENCES department(id), salary DECIMAL(10,2) ); ``` --- ### 三、系统架构设计 1. **分层架构模式** $$ \begin{cases} \text{表现层} & \text{(前端: Vue/React)} \\ \text{业务逻辑层} & \text{(Spring MVC控制器)} \\ \text{数据访问层} & \text{(DAO模式 + JPA)} \end{cases} $$ 2. **服务扩展方案** - 使用Spring Cloud实现服务拆分(如:考勤模块、薪资模块独立部署) - API网关统一管理请求路由(Zuul或Gateway组件) --- ### 四、核心功能模块 | 模块名称 | 功能描述 | 技术实现要点 | |----------------|-----------------------------------|------------------------------| | 员工信息管理 | CRUD操作、档案导出PDF | POI库生成Excel, iText生成PDF | | 考勤统计 | 打卡数据校验、异常预警 | Quartz定时任务, Redis缓存 | | 薪资计算 | 个税公式嵌入(如:$T = (S - 5000) \times r - d$) | 策略模式封装计算规则 | --- ### 五、安全性设计 1. **权限控制** - 基于Spring Security实现URL级拦截 - 权限表达式示例:`hasRole('HR_ADMIN')` 2. **数据加密** - 敏感字段使用AES加密(如:`AES/ECB/PKCS5Padding`) - HTTPS传输保障通信安全 --- ### 六、研究热点与挑战 1. **当前研究趋势** - 大数据分析集成(Hadoop/Spark处理员工行为数据) - AI技术应用(如:考勤异常模式识别) 2. **待解决问题** - 高并发场景下的性能优化(需满足$\text{QPS} \geq 1000$) - 多系统数据同步的最终一致性(CAP理论权衡) --- ### 七、推荐参考文献 1. 《Spring实战(第5版)》——Craig Walls 2. 《企业应用架构模式》——Martin Fowler 3. IEEE/ACM期刊相关论文(关键词:`Java EE HRMS`, `Microservices Design`) 如需具体实现细节或某模块的代码示例,可进一步说明研究方向!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值