Spring Security进阶

Spring Security进阶 1.连接数据库进行数据的验证

Spring Security进行身份验证或者权限控制时,用户名和密码应该要和数据库的进行比较才行,用户的各种信息我们从数据库中去获取,不用自己在代码或者配置文件中写。

案例

1)创建项目

自己创建一个Maven项目

2)导入依赖 <parent> <!--Spring boot--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-parent</artifactId> <version>2.0.6.RELEASE</version> </parent> <dependencies> <!--Spring boot Web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--Spring Security--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--数据库连接框架JPA--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> </dependencies> 3)创建启动类 @SpringBootApplication public class SecurityApplication2 { public static void main(String[] args) { SpringApplication.run(SecurityApplication2.class, args); } } 4)配置文件

在项目的resources文件的目录下创建一个配置文件:application.properties

#连接数据库 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/你的数据库?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.username=用户名 spring.datasource.password=密码 #数据库表的生成 spring.jpa.generate-ddl=true #显示执行的sql语句 spring.jpa.show-sql=true #使用的数据库 spring.jpa.database=mysql 5)创建类

来创建一个实体层类、dao层接口、service层、控制层

实体类

//这个注解表示这个是实体类,对应数据库中的表,默认实体名就是类名 @Entity public class UserInfo { //这个属性的表中的主键 @Id //主键的生成策略,IDENTITY 主键自增长 @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; //用户名 private String username; //密码 private String password; //角色 private String roles; public Long getId() { return id; } public void setId(Long id) { this.id = id; } 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 String getRoles() { return roles; } public void setRoles(String roles) { this.roles = roles; } }

dao层接口

/* * 继承JpaRepository<UserInfo,Long>接口,泛型一个是实体类,一个是主键类型 * */ public interface UserInfoDao extends JpaRepository<UserInfo,Long> { //根据用户名查找用户 //(温馨提示:想要查找的话方法名要为 findBy属性字段 删除的话 deleteBy属性字段 ...以此类推这样才不报错) UserInfo findByUsername(String username); }

service层

public interface UserInfoService { //根据用户名查找用户 UserInfo findByUsername(String username); } @Service public class UserInfoServiceImpl implements UserInfoService { @Autowired private UserInfoDao userInfoDao; //根据用户名返回用户 @Override public UserInfo findByUsername(String username) { UserInfo user = userInfoDao.findByUsername(username); return user; } }

controller层

@RestController @RequestMapping("/userInfo") public class UserInfoController { @RequestMapping("common") //方法执行前验证用户是否有该角色 @PreAuthorize(value = "hasAnyRole('normal','admin')") public String commonUserInfo() { return "==测试数据库 有两个角色=="; } @RequestMapping("admin") //方法执行前验证是否有该角色 @PreAuthorize(value = "hasAnyRole('admin')") public String adminUserInfo() { return "==测试数据库 有一个角色=="; } }

这些准备工作都做完之后,我们可以往数据库中插入一些数据,创建一个类,用来往数据库中添加数据的。

@Component public class InitJdbc { @Autowired private UserInfoDao userInfoDao; //Java自带的注解,程序启动的时候执行该方法,每启动一次执行一次, //插入成功了,再启动项目的时候不想再重复插入,可以把@PostConstruct注释掉 @PostConstruct public void init() { //密码要加密 PasswordEncoder pe = new BCryptPasswordEncoder(); //添加一个用户 UserInfo userInfo = new UserInfo(); userInfo.setUsername("wangwu"); userInfo.setPassword(pe.encode("123456")); userInfo.setRoles("normal"); userInfoDao.save(userInfo); //添加一个用户 UserInfo userInfo1 = new UserInfo(); userInfo1.setUsername("admin"); userInfo1.setPassword(pe.encode("admin")); userInfo1.setRoles("admin"); userInfoDao.save(userInfo1); } }

现在就可以启动项目看看数据库中是否插入成功数据了。

接下来做权限的验证==========

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zggwfs.html