SpringBoot(⼗四)SpringBoot中使⽤Security实现权限控制
你好,【程序职场】专注于:Spring Boot ,微服务 和 前端APP开发,闲暇之余⼀起聊聊职场规划,个⼈成长,还能带你⼀起探索副业赚钱渠道,在提升技术的同时我们⼀起交流 敏捷流程 提⾼⼯作效率,从技术到管理⼀步步提升⾃我!
标签:⼀个执着的职场程序员!
本⽂是Spring Boot系列的第⼗四篇,了解前⾯的⽂章有助于更好的理解本⽂:
前⾔
(⼀). 什么是Spring Security?
(⼆). 相关配置
(三). Spring Security实战
上篇⽂章为⼤家讲述了 Spring Boot中 ;本篇⽂章接着上篇内容继续为⼤家介绍SpringBoot中 实现权限控制。
(⼀). 什么是Spring Security?
在web应⽤开发中,安全⽆疑是⼗分重要的,选择Spring Security来保护web应⽤是⼀个⾮常好的选择。Spring Security 是spring项⽬之中的⼀个安全模块,可以⾮常⽅便与spring项⽬⽆缝集成。特别是在spring boot项⽬中加⼊spring security更是⼗分简单。本篇我们介绍spring security,以及spring security在web应⽤中的使⽤。
Spring Security,这是⼀种基于 Spring AOP 和 Servlet 过滤器的安全框架。它提供全⾯的安全性解决⽅案,同时在 Web 请求级和⽅法调⽤级处理⾝份确认和授权。
(⼆). 相关配置
http.authorizeRequests()    .anyRequest().authenticated()    .and()    .formLogin()    .and()
//开启cookie保 ⽤户数据
.rememberMe()
//设置cookie有效期
.tokenValiditySeconds(60 * 60 * 24 * 7)
//设置cookie的私钥
.key("")
.logout()
//默认注销⾏为为logout,可以通过下⾯的⽅式来修改
.logoutUrl("/custom-logout")
//设置注销成功后跳转页⾯,默认是跳转到登录页⾯
.
springmvc常用标签logoutSuccessUrl("")
.loginPage("/login")    .permitAll()
.antMatchers("/resources/**", "/signup", "/about")
.antMatchers("/admin/**")
.hasRole("ADMIN")    .antMatchers("/db/**")
.access("hasRole('ADMIN') and hasRole('DBA')")    .anyRequest()
.authenticated()    .httpBasic();
http.authorizeRequests()⽅法有多个⼦节点,每个匹配器按其声明
的顺序进⾏考虑。上⾯列出了常⽤的基本配置,包括请求授权,登录页⾯路径,
成功后跳转等
1.http.authorizeRequests()⽅法有多个⼦节点,每个匹配器按其声明的顺序进⾏考虑。
2我们指定了任何⽤户都可以访问的多种URL模式。具体来说,如果URL以“/ resources /”开头,等于“/ signup”或等于“/ about”,则任何⽤户都可以访问请求。
3 任何以“/ admin /”开头的URL都将仅限于具有“ROLE_ADMIN”⾓⾊的⽤户。您会注意到,由于我们正在调⽤hasRole⽅法,
因此我们不需要指定“ROLE_”前缀。
4 任何以“/ db /”开头的URL都要求⽤户同时拥有“ROLE_ADMIN”和“ROLE_DBA”。您会注意到,由于我们使⽤的是hasRole
表达式,因此我们不需要指定“ROLE_”前缀。
5 任何尚未匹配的URL只需要对⽤户进⾏⾝份验证
(三). Spring Security实战
#创建项⽬
#数据库配置
我们这⾥还是通过mysql数据库来实现,配置数据库依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
配置数据库 application.properties
spring.datasource.sql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springbootsecurity?useUnicode=true&characterEncoding=utf-8 spring.datasource.username=root
spring.datasource.password=root
springframework.security=info
spring.thymeleaf.cache=false
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jackson.serialization.indent_output=true
#⽤户和⾓⾊
我们使⽤JPA来定义⽤户和⾓⾊
yyoung.springbootsecurity;
import org.GrantedAuthority;
import org.authority.SimpleGrantedAuthority;
import org.userdetails.UserDetails;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@Entity
public class SysUser implements UserDetails {
@Id
@GeneratedValue
private Long id;
private String username;
private String password;
@ManyToMany(cascade = {CascadeType.REFRESH},fetch = FetchType.EAGER)    private List<SysRole> roles;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public List<SysRole> getRoles() {

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。