您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Java后台管理系统如何实现登录注册和权限模块
## 一、系统架构概述
典型的Java后台管理系统通常采用以下技术栈:
- **前端**:Vue.js/React + Element UI/Ant Design
- **后端**:Spring Boot + Spring Security
- **数据库**:MySQL/PostgreSQL
- **权限模型**:RBAC(基于角色的访问控制)
## 二、数据库设计
### 1. 用户表(user)
```sql
CREATE TABLE `sys_user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(100) NOT NULL COMMENT '密码',
`salt` varchar(20) COMMENT '加密盐值',
`email` varchar(100) COMMENT '邮箱',
`phone` varchar(20) COMMENT '手机号',
`status` tinyint DEFAULT 1 COMMENT '状态(0-禁用,1-正常)',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `sys_role` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '角色名称',
`code` varchar(50) NOT NULL COMMENT '角色编码',
`remark` varchar(100) COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `sys_user_role` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL,
`role_id` bigint NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_user_role` (`user_id`,`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
采用BCryptPasswordEncoder进行密码加密:
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@PostMapping("/register")
public Result register(@RequestBody UserRegisterDTO dto) {
// 验证用户名是否已存在
if (userService.existsUsername(dto.getUsername())) {
throw new BusinessException("用户名已存在");
}
// 密码加密
String encodedPwd = passwordEncoder.encode(dto.getPassword());
// 创建用户
SysUser user = new SysUser();
user.setUsername(dto.getUsername());
user.setPassword(encodedPwd);
user.setEmail(dto.getEmail());
userService.save(user);
return Result.success();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager()))
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin/users")
public Result<List<UserVO>> getUserList() {
// ...
}
@PreAuthorize("hasAuthority('user:delete')")
@DeleteMapping("/users/{id}")
public Result deleteUser(@PathVariable Long id) {
// ...
}
实现FilterInvocationSecurityMetadataSource
接口:
@Override
public Collection<ConfigAttribute> getAttributes(Object object) {
// 1. 获取请求路径
String requestUrl = ((FilterInvocation) object).getRequestUrl();
// 2. 查询路径需要的权限
List<SysPermission> permissions = permissionService.listByUrl(requestUrl);
// 3. 转换为Spring Security需要的格式
return permissions.stream()
.map(p -> new SecurityConfig(p.getCode()))
.collect(Collectors.toList());
}
使用Redis缓存权限数据:
@Cacheable(value = "user_permissions", key = "#userId")
public List<String> getUserPermissions(Long userId) {
return permissionMapper.selectByUserId(userId);
}
根据用户权限动态生成路由:
// 过滤有权限的路由
function filterAsyncRoutes(routes, permissions) {
return routes.filter(route => {
if (route.meta && route.meta.permission) {
return permissions.includes(route.meta.permission)
}
return true
})
}
使用自定义指令:
Vue.directive('permission', {
inserted(el, binding) {
const { value } = binding
const permissions = store.getters.permissions
if (value && !permissions.includes(value)) {
el.parentNode && el.parentNode.removeChild(el)
}
}
})
本文实现了Java后台管理系统的核心安全模块: 1. 采用RBAC模型设计权限系统 2. 使用Spring Security+JWT实现认证授权 3. 前后端配合完成细粒度权限控制 4. 通过多种措施提升系统安全性
完整示例代码可参考GitHub仓库:示例项目链接 “`
注:实际文章可根据需要补充以下内容: 1. 异常处理细节 2. 验证码集成方案 3. 第三方登录实现 4. 分布式环境下的会话管理 5. 具体的性能优化方案
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。