之前添加了SS3作为作为系统的权限验证框架,但用户却是在SS的配置文件中直接配置所得,作为一个优秀的组件,当然是支持用户自定义用户的。
1、自定义表结构
create table T_SYS_USER--用户表
(
ID NUMBER not null primary key,
USERNAME VARCHAR2(50),
PASSWORD VARCHAR2(50),
FULLNAME VARCHAR2(100),
DEPARTMENT_ID NUMBER
);
create table T_SYS_ROLE--角色表
(
ID NUMBER not null primary key,
NAME VARCHAR2(20) not null,
DESCRIPTION VARCHAR2(100)
);
create table T_SYS_USER_ROLE--用户角色关联表
(
USER_ID NUMBER not null,
ROLE_ID NUMBER not null
);
add constraint PK_USER_ROLE primary key (USER_ID, ROLE_ID);
alter table T_SYS_USER_ROLE
add constraint FK_SYS_USER foreign key (USER_ID)
references t_sys_user (ID);
alter table T_SYS_USER_ROLE
add constraint FK_SYS_ROLE foreign key (ROLE_ID)
references t_sys_role (ID);
2、创建实体类User.java,对应于用户表,使其实现UserDetail类
@Entity
@Table(name="T_SYS_USER")
public class User implements Serializable, UserDetails {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_USER")
@SequenceGenerator(name="SEQ_USER", sequenceName="SEQ_USER")
private Long id;
private String username;
private String password;
private String fullname;
@Cascade(value={CascadeType.ALL})
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "T_SYS_USER_ROLE", joinColumns = { @JoinColumn(name = "USER_ID", referencedColumnName = "ID", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID", referencedColumnName = "ID", nullable = false) })
private Set<Role> roles;
......(各种get,set方法)
@Override
public Collection<GrantedAuthority> getAuthorities() {
return new ArrayList<GrantedAuthority>(getRoles());
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
创建实体类Role.java,对应于角色表,并使其实现GrantedAuthority 类
@Entity
@Table(name="T_SYS_ROLE")
public class Role implements Serializable, GrantedAuthority {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_ROLE")
@SequenceGenerator(name="SEQ_ROLE", sequenceName="SEQ_ROLE")
private Long id;
private String name;
private String description;
@Cascade(value={CascadeType.ALL})
@ManyToMany(mappedBy = "roles", fetch = FetchType.LAZY)
private Set<User> users;
......(各种get,set方法)
@Override
public String getAuthority() {
return getName();
}
}
3、UserServiceImpl类实现UserDetailsService类的loadUserByUsername方法
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
User user = userDao.loadUserByName(username);
if (user == null) {
log.warn("Login Error : user not found...");
throw new UsernameNotFoundException("Login Error : " + username + " not found!");
}
user.getAuthorities();
return user;
}
4、修改SS配置文件
<authentication-manager>
<authentication-provider user-service-ref="UserService">
</authentication-provider>
</authentication-manager>
这样,SS框架便会使用UserService类的loadUserByUsername方法来进行用户身份验证
5、插入数据到数据库进行测试
角色表应该至少要保证有ROLE_USER跟ROLE_ADMIN两个用户
分享到:
相关推荐
在本资源中,我们将探讨如何通过Maven的自定义archetype功能来创建自定义项目骨架,以便快速搭建符合特定需求的SpringMVC项目。 首先,让我们理解什么是Maven Archetype。Archetype是Maven提供的一种模板机制,可以...
以上就是关于"springmvc +mybatis +maven 项目搭建demo"的相关知识点,这个项目模板为初学者提供了学习和实践现代Java Web开发的基础框架,通过理解和修改这个示例,开发者能够更好地掌握这些技术的整合与使用。
在"mavenWeb空项目"中,开发者已经为这个Web应用搭建了基本的单元测试环境,这有助于确保代码的质量和稳定性,同时便于后续的功能添加和修改。 综上所述,"mavenWeb空项目"是一个包含Java Web开发基础的项目模板,...
** Maven本地仓库搭建工具Nexus简介 ** Maven是一个广泛使用的Java项目管理和综合工具,它通过依赖管理和项目构建生命周期管理简化了项目的构建、部署和管理。然而,随着项目的增多,依赖库也会变得庞大,直接从...
本文将深入探讨如何使用Maven搭建一个基于Spring MVC的项目,并结合给定的文件列表,解释项目的结构和运行机制。 首先,Maven是一个流行的项目管理和依赖管理工具,它通过读取项目的`pom.xml`文件来管理项目构建、...
- 配置环境变量:在Windows系统中,设置M2_HOME变量指向Maven安装目录,并在Path变量中添加Maven的bin目录。 - 测试安装:通过命令行运行mvn -version,确认安装的Maven版本为Apache Maven 3.1.1即为安装成功。 -...
Apache Maven 是一个强大的Java项目管理工具,它遵循约定优于配置的原则,使得构建过程标准化并简化了项目的生命周期管理。Maven通过使用一个项目对象模型(Project Object Model,POM)来描述项目,并自动处理构建...
总结,通过Maven,我们可以快速地搭建一个基于SpringMVC的Web应用,并利用其强大的依赖管理能力来简化项目构建。在实际开发中,我们还需要考虑安全性、性能优化以及错误处理等多个方面,但这个简单的登录例子为我们...
然而,随着项目的发展,依赖库的数量会不断增多,这时,本地Maven仓库可能无法满足需求,这时就需要搭建一个私有的Maven仓库,即Maven私服。Nexus作为一款广泛应用的Maven私服,可以有效地解决这个问题。本文将详细...
### Maven开发环境搭建详解 ...通过上述步骤,你可以成功地在Eclipse中搭建基于Maven的Java Web项目开发环境,并进行调试和服务配置。这不仅能够提高开发效率,还能够帮助开发者更好地管理项目的依赖关系。
#micaicms-web-modules-archetypeMaven之自定义archetype生成多模块结构的基础项目骨架一:项目骨架介绍该项目骨架集成了Spring,SpringMVC,MyBatis,jsp,jquery,bootstrap等二:项目骨架使用介绍1.首先下载该...
SpringMVC+maven搭建Web项目 SpringMVC是一个基于Java的MVC框架,广泛应用于Web开发中,而Maven是一个项目管理工具,能够帮助开发者更方便地管理项目依赖关系和构建项目。SpringMVC+maven搭建Web项目是目前很多Java...
### Maven基础环境搭建详解 #### 一、Maven简介与作用 Maven 是一款非常流行的自动化构建工具,它主要用于 Java 项目的构建、依赖管理和项目信息管理。通过一系列生命周期和插件,Maven 能够自动完成项目的编译、...
- **PATH**:添加 `%MAVEN_HOME%\\bin` 到系统路径中。 - **验证安装**:打开命令行窗口,输入 `mvn -version`,查看版本信息确认安装成功。 #### 二、相关概念 1. **仓库** - **定义**:用于存储 jar 包的库。...
在本项目中,Maven负责依赖管理,确保所有所需的库(如Spring、Mybatis等)能够正确地被下载并添加到类路径中,简化了项目的构建过程。 2. SpringMVC: SpringMVC是Spring框架的一部分,用于处理Web请求。它采用...
在本文中,我们将深入探讨如何使用Maven搭建Java EE项目,这是一个系统性的教程,适合初学者和有经验的开发者参考。Maven是一个强大的项目管理和综合工具,它可以帮助我们管理Java项目中的依赖,构建流程,以及生成...
在Linux环境下搭建自己的私有Maven仓库是许多开发者在企业级项目中常用的一种实践,这样可以方便地管理和分发自定义的jar依赖和maven插件。本篇将详细介绍如何在Linux系统上创建私有Maven仓库,并发布自定义的jar包...