文章目錄
一、要求
index.html 可以被所有用戶訪問
1.html只能被VIP1訪問
2.html只能被VIP2訪問
3.html只能被VIP3訪問
沒有權限跳到登錄頁
二、依賴管理
- springboot 2.2.5
- spring security 5.2.4
pom.xml需要的依賴如下:
<dependencies>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--security-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
三、配置config文件
我們先看看官網的教程:spring security 5.2.4 配置教程
模擬官網教程配置如下:
package com.xsy.worker_manager.config;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@EnableWebSecurity // 開啟web security服務
public class SecurityConfig extends WebSecurityConfigurerAdapter {
//請求認證的規則
@Override
protected void configure(HttpSecurity http) throws Exception {
//首頁可以訪問,功能頁只有有權限的人才能訪問
http.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/level1/**").hasRole("vip1")
.antMatchers("/level2/**").hasRole("vip2")
.antMatchers("/level3/**").hasRole("vip3");
//沒有權限跳到登錄頁 /login,登陸后跳到主頁
http.formLogin();
//開啟注銷功能 /logout, 注銷后跳到首頁
http.logout().logoutSuccessUrl("/index.html");
//開啟記住我功能
http.rememberMe();
}
//授權
//密碼編碼
//spring security 5.0+要密碼加密
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//將用戶信息放到內存里
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).
withUser("xsy").password(new BCryptPasswordEncoder().encode("123456")).roles("vip3").
and().withUser("csy").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2").
and().withUser("sy").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
}
}
四、擴展
如果需要在后台接口設置權限,則需要在config配置文件上使用如下注解:
@EnableGlobalMethodSecurity(prePostEnabled = true)
然后直接在contoller的接口方法上添加注解如下:
@PreAuthorize("hasRole('vip1')")