前面使用了一个数据库表示了用户的信息及其角色信息。这次我要将角色表分离出来单独使用一张表来管理,由于用户和角色是多对多的关系,所以还需要一张用户和角色的关系表。数据库如下:
用户表:sec_user
create table sec_user(
username varchar(100) primary key,
password varchar(255)
);
插入数据:
insert into sec_user values('admin','admin');
insert into sec_user values('test','test');
角色表:sec_role
create table sec_role(
rolename varchar(100) primary key,
prompt varchar(255)
);
插入数据:
insert into sec_role values('ROLE_USER','common user privilege');
insert into sec_role values('ROLE_ADMIN','administrator privilege');
用户角色关系表:sec_role_user
create table sec_role_user(
username varchar(100) not null,
rolename varchar(100) not null,
constraint ru_id primary key(username,rolename)
);
为关系表添加外键约束:
alter table sec_role_user add constraint fk_user foreign key(username) references sec_user(username);
alter table sec_role_user add constraint fk_role foreign key(rolename) references sec_role(rolename);
为关系表插入数据:
insert into sec_role_user values('test','ROLE_USER');
insert into sec_role_user values('admin','ROLE_USER');
insert into sec_role_user values('admin','ROLE_ADMIN');
修改实体类:User.java
@Entity
@Table(name="SEC_USER")
public class User implements Serializable,UserDetails {
/**
*
*/
private static final long serialVersionUID = 4654282337754230886L;
@Id
@Column(name="USERNAME",unique=true,nullable=false,length=100)
private String username;
@Column(name="PASSWORD",length=255)
private String password;
@ManyToMany(targetEntity=Role.class,fetch=FetchType.EAGER)
@JoinTable(name="SEC_ROLE_USER",joinColumns={@JoinColumn(name="USERNAME",referencedColumnName="USERNAME")},
inverseJoinColumns={@JoinColumn(name="ROLENAME",referencedColumnName="ROLENAME")})
private Collection<Role> roles;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Collection<Role> getRoles() {
return roles;
}
public void setRoles(Collection<Role> roles) {
this.roles = roles;
}
public Collection<GrantedAuthority> getAuthorities() {
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
Iterator<Role> iter = this.roles.iterator();
while(iter.hasNext()){
Role role = iter.next();
GrantedAuthority authority = new GrantedAuthorityImpl(role.getRolename());
authorities.add(authority);
}
/*String[] roles = this.role.split(",");
for(String r : roles){
if(r != null && !"".equals(r)){
GrantedAuthority authority = new GrantedAuthorityImpl(r);
authorities.add(authority);
}
}*/
return authorities;
}
public boolean isAccountNonExpired() {
return true;
}
public boolean isAccountNonLocked() {
return true;
}
public boolean isCredentialsNonExpired() {
return true;
}
public boolean isEnabled() {
return true;
}
}
注意,由于该实体类实现了UserDetails接口,该接口的getAuthorities获取的角色信息应该更改了。
添加实体类:Role.java
@Entity
@Table(name="SEC_ROLE")
public class Role implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8216539800374390907L;
@Id
@Column(name="ROLENAME",unique=true,nullable=false,length=100)
private String rolename;
@Column(name="PROMPT",length=255)
private String prompt;
@ManyToMany(targetEntity=User.class,mappedBy="roles")
private Collection<User> users;
public String getRolename() {
return rolename;
}
public void setRolename(String rolename) {
this.rolename = rolename;
}
public String getPrompt() {
return prompt;
}
public void setPrompt(String prompt) {
this.prompt = prompt;
}
public Collection<User> getUsers() {
return users;
}
public void setUsers(Collection<User> users) {
this.users = users;
}
}
添加实体类时,别忘了向hibernate.cfg.xml或applicationContext.xml中注册。
现在已经修改完成了。
分享到:
相关推荐
主要介绍了Spring security基于数据库中账户密码认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1.SpringSecurity 3.2实例,继承SpringMVC 3.2; 2.默认账户 admin,admin; 3.模拟后台数据加载,未集成数据库;
【资源说明】 该项目是个人毕设项目源码,评审分达到95分,都经过严格...## 技术环境: JDK1.8 SpringSecurity SpringBoot Mysql Mybatis Thymeleaf echarts 管理员账户密码: admin/admin 用户账户密码: user/123
SpringSecurity MyBatis-Plus 2 ActiveMQ 腾讯云短信和对象存储服务 【运行】 执行 sql/breed.sql 文件初始化数据库 修改 application.properties 配置信息: spring.datasource.username 数据库用户名 spring....
登录用户默认账户admin密码admin 已有功能:供应给管理,商品管理,商品页的分页显示,用户管理(spring-security) 【备注】 主要针对计算机相关专业的正在做毕设的学生和需要项目实战的Java学习者。 也可作为课程...
MySQL 是一款广受欢迎的开源关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现隶属于美国甲骨文公司(Oracle)。自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用...
- SpringSecurity 安全框架 - MybatisPlus 数据库框架 - Quartz 定时任务 - EasyExcel Excel表操作 前端项目主要技术选型则是: - Vue2 项目主体 - Axios.js 请求库 - Ant-Desing-Vue UI框架 # 问题解决 ### ...
SpringSecurity 安全框架 MybatisPlus 数据库框架 Quartz 定时任务 EasyExcel Excel表操作 前端项目主要技术选型则是: Vue2 项目主体 Fantastic-admin 后台脚手架 因此前端想要更改或者出现问题,可以首先阅读文档...
基于JavaWeb的流浪宠物管理系统是一个使用Spring Boot和MySQL数据库构建的Web应用程序。该系统旨在为流浪宠物提供一个集中的管理平台,以帮助相关组织和个人更有效地管理和照顾这些无家可归的动物。 技术栈说明: ...
系统可能采用前后端分离的设计模式,前端使用现代JavaScript框架如AngularJS、React或Vue.js来构建一个响应式的用户界面,后端由SpringBoot搭建,整合了Spring MVC、Spring Data等子项目来简化数据库操作和RESTful ...
基于SpringBoot+Vue的CSGO赛事管理系统源码+数据库.zip 高分通过项目,已获导师指导。 本项目是一套基于...后端技术栈:SpringBoot + SpringSecurity + MyBatis + MySQL 系统功能: 1.登录注册:用户可以通过注册
注册和登录账户是使用Spring Security进行用户认证和授权,以确保系统的安全性。 - 留言板块:用户可以在留言板块中查看所有留言,并发表自己的留言。这里是一个开放的平台,所有的留言都可以被公开查看。 - 留言...
8. **数据库设计**:使用MySQL数据库存储用户信息、商品信息、订单信息等数据,MyBatis作为ORM工具,简化了数据库编程,提高了开发效率。 9. **前后端集成**:系统采用传统的前后端集成方式,前端JSP页面与后端Java...
我们使用了Spring Security框架来实现用户身份认证和授权,并使用JWT令牌来确保用户会话的安全性。在用户注册和登录时,我们会进行邮箱验证,确保用户信息的真实性和有效性。 2. 个人资料:用户可以编辑和更新自己的...
后端技术栈:SpringBoot + SpringSecurity + MyBatis + MySQL 系统功能: 1.登录注册:用户可以通过注册页面进行注册,注册完成后可以登录系统,也可以通过第三方登录进行操作。 2.首页展示:首页展示赛事信息、...
前后端分离,基于vue2,uniapp,vue-cli,springboot,springsecurity,mybatisplus,mysql初步实现物业管理APP前端界面,后台管理界面,后台系统 MySQL 是一款广受欢迎的开源关系型数据库管理系统(RDBMS),由...
本毕业设计项目旨在通过使用Spring Boot框架和MySQL数据库开发一个简洁、高效的疫苗发布和接种预约系统。 技术栈介绍: 后端框架:Spring Boot - 一个简化Spring应用开发的框架,允许快速搭建项目并自动配置。 ...
2. **用户账户与订单管理**:用户可以注册个人账户,查看订单历史、收藏的游戏、以及进行账户余额的充值和提现。 3. **支付系统集成**:整合多种支付方式,如信用卡、支付宝、微信支付等,为用户提供便捷的支付体验...
9. **数据库设计**:使用MySQL数据库存储商品信息、用户信息、订单信息等数据,MyBatis作为ORM工具,简化了数据库编程,提高了开发效率。 10. **前后端分离**:系统采用前后端分离的设计理念,前端Vue.js视图与后端...
这是一个关于“weixin123在线订餐系统”的项目资源包,它使用了Spring Boot作为后端框架。下面将详细介绍该项目所使用的技术和功能: 技术栈: Spring Boot:一个用于简化Spring应用开发的框架,它允许以最少的...