簡單案例
建立springboot工程、引入 spring-boot-starter-security 依賴,編寫controller層,在通路接口方法時會跳轉到springsecurity的預設登入頁面 ,如下:

預設使用者名:user
登入密碼在控制台可以找到
web權限方案
1、設定登入的使用者名和密碼
方式一:通過配置檔案
#spring.security.user.name=admin
#spring.security.user.password=admin
方式二:通過配置類
package com.ice.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* @author 紫風
* @date 2021年08月05日 18:25
*/
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
.withUser("admin").password(new BCryptPasswordEncoder().encode("123456")).roles("admin")
.and()
.withUser("user").password(new BCryptPasswordEncoder().encode("123456")).roles("admin")
.and()
.withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("admin");
}
}
方式三:自定義編寫實作類
1、編寫接口UserDetailsService實作類,傳回User對象,User對象裡有使用者名、密碼和操作權限
package com.ice.service;
import com.ice.mapper.MemberMapper;
import com.ice.pojo.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author 紫風
* @date 2021年08月05日 22:18
*/
//注入userDetailsService對象
@Service("userDetailsService")
//得到使用者密碼并傳回user對象
public class MyUserDetailsService implements UserDetailsService {
@Autowired
private MemberMapper memberMapper;
@Override
public UserDetails loadUserByUsername(String userid) throws UsernameNotFoundException {
// 調用memberMapper的方法查詢資料庫
// 根據使用者名查詢資料庫
Member member = memberMapper.selectByusername(userid);
// 判斷使用者是否存在
if (member == null) {
throw new UsernameNotFoundException("使用者不存在");
}
List<GrantedAuthority> auths =
AuthorityUtils.commaSeparatedStringToAuthorityList("admin");
// 從查詢資料庫傳回users對象,得到使用者名和密碼,傳回users
return new User(member.getUserid(),
new BCryptPasswordEncoder().encode(member.getPassword()), auths);
}
}
2、編寫配置類,繼承WebSecurityConfigurerAdapter,注入userDetailsService,并設定使用userDetailsService傳回的 UserDetails中的Username,password屬性(會與登入傳回來的username、password作認證對比),即資料庫查出來的使用者名和密碼
源碼分析
1、 UserDetailsService
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.security.core.userdetails;
public interface UserDetailsService {
UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException;
}
2、 UserDetails
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.security.core.userdetails;
import java.io.Serializable;
import java.util.Collection;
import org.springframework.security.core.GrantedAuthority;
public interface UserDetails extends Serializable {
Collection<? extends GrantedAuthority> getAuthorities();
String getPassword();
String getUsername();
boolean isAccountNonExpired();
boolean isAccountNonLocked();
boolean isCredentialsNonExpired();
boolean isEnabled();
}
整合mybatis 完成資料庫操作
1、引入相關依賴
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--mybatis代碼生成器-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
2、代碼生成器生成pojo、sql映射類·、mapper接口類
3、在MyUserDetailsService調用mapper接口的方法查詢資料庫進行使用者認證(上面已經寫好)
4、在啟動類添加注解 @MapperScan(“com.ice.mapper.MemberMapper”)
package com.ice;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.ice.mapper.MemberMapper")
public class Security5Application {
public static void main(String[] args) {
SpringApplication.run(Security5Application.class, args);
}
}
5、配置檔案配置好資料庫資訊
server.port=8080
#spring.security.user.name=admin
#spring.security.user.password=admin
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssmcards?serverTimezone=GMT&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=111aaa