完整pom:
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.sdkj</groupId>
- <artifactId>security</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>security</name>
- <description>Demo project for Spring Boot</description>
-
- <properties>
- <java.version>1.8</java.version>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>org.junit.vintage</groupId>
- <artifactId>junit-vintage-engine</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <!-- spring security 安全认证 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-security</artifactId>
- <version>2.5.14</version>
- </dependency>
-
- <!-- pool 对象池 -->
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-pool2</artifactId>
- </dependency>
-
- <!-- redis 缓存操作 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- </dependency>
-
-
- <!-- Token生成与解析-->
- <dependency>
- <groupId>io.jsonwebtoken</groupId>
- <artifactId>jjwt</artifactId>
- <version>0.9.1</version>
- </dependency>
-
- <!-- fastjson2-->
- <dependency>
- <groupId>com.alibaba.fastjson2</groupId>
- <artifactId>fastjson2</artifactId>
- <version>2.0.12</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- <version>3.12.0</version>
- </dependency>
-
- </dependencies>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-dependencies</artifactId>
- <version>${spring-boot.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.8.1</version>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- <encoding>UTF-8</encoding>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <version>2.3.7.RELEASE</version>
- <configuration>
- <mainClass>com.sdkj.security.SecurityApplication</mainClass>
- </configuration>
- <executions>
- <execution>
- <id>repackage</id>
- <goals>
- <goal>repackage</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
- </project>
1.新建用户类并继承UserDetails
- package com.sdkj.security.entity.system;
-
- import com.alibaba.fastjson2.annotation.JSONField;
- import lombok.Data;
- import org.springframework.security.core.GrantedAuthority;
- import org.springframework.security.core.userdetails.UserDetails;
-
- import java.util.Collection;
- import java.util.Set;
-
- /**
- * 登录用户身份权限
- * @author javachen
- */
- @Data
- public class LoginUser implements UserDetails
- {
- private static final long serialVersionUID = 1L;
-
- /**
- * 用户信息
- */
- private SysUser sysUser;
-
- /**
- * 角色信息
- */
- private SysRole sysRole;
-
- /**
- * 用户唯一标识
- */
- private String token;
-
- /**
- * 权限列表
- */
- private Set<String> permissions;
-
- /**
- * 登录时间
- */
- private Long loginTime;
-
- /**
- * 过期时间
- */
- private Long expireTime;
-
- /**
- * 登录IP地址
- */
- private String ipaddr;
-
- /**
- * 登录地点
- */
- private String loginLocation;
-
- /**
- * 浏览器类型
- */
- private String browser;
-
- /**
- * 操作系统
- */
- private String os;
-
- @JSONField(serialize = false)
- @Override
- public String getPassword()
- {
- return sysUser.getPassword();
- }
-
- @Override
- public String getUsername()
- {
- return sysUser.getUserName();
- }
-
- /**
- * 账户是否未过期,过期无法验证
- */
- @JSONField(serialize = false)
- @Override
- public boolean isAccountNonExpired()
- {
- return true;
- }
-
- /**
- * 指定用户是否解锁,锁定的用户无法进行身份验证
- *
- * @return
- */
- @JSONField(serialize = false)
- @Override
- public boolean isAccountNonLocked()
- {
- return true;
- }
-
- /**
- * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
- *
- * @return
- */
- @JSONField(serialize = false)
- @Override
- public boolean isCredentialsNonExpired()
- {
- return true;
- }
-
- /**
- * 是否可用 ,禁用的用户不能身份验证
- *
- * @return
- */
- @JSONField(serialize = false)
- @Override
- public boolean isEnabled()
- {
- return true;
- }
-
- @Override
- public Collection<? extends GrantedAuthority> getAuthorities()
- {
- return null;
- }
-
- public LoginUser() {
-
- }
-
- public LoginUser(SysUser sysUser, SysRole sysRole, Set<String> permissions) {
- this.sysUser = sysUser;
- this.sysRole = sysRole;
- this.permissions = permissions;
- }
-
- }
SysRole:
- package com.sdkj.security.entity.system;
-
- import lombok.Data;
- import lombok.experimental.Accessors;
-
- import java.io.Serializable;
-
- /**
- * @author javachen
- * @description SysRole
- */
- @Data
- @Accessors(chain = true)
- public class SysRole implements Serializable {
-
- /**
- * id
- */
- private Long id;
-
- /**
- * 角色名称
- */
- private String name;
-
- /**
- * 角色权限字符串
- */
- private String permissionStr;
-
- }
-
SysUser:
- package com.sdkj.security.entity.system;
-
- import lombok.Data;
- import lombok.experimental.Accessors;
-
- import java.io.Serializable;
-
- /**
- * @author javachen
- * @description SysUser
- */
- @Data
- @Accessors(chain = true)
- public class SysUser implements Serializable {
-
- /**
- * id
- */
- private Long id;
-
- /**
- * 用户账号
- */
- private String userName;
-
- /**
- * 密码
- */
- private String password;
-
- /**
- * 真实姓名
-
- */
- private String realName;
-
- /**
- * 身份证号
- */
- private String idCard;
-
- /**
- * 手机号码
- */
- private String phoneNumber;
-
- /**
- * sys_org_manager组织管理表id
- */
- private Long sysOrgManagerId;
-
- /**
- * sys_org_manager组织管理表name
- */
- private String sysOrgManagerName;
-
- /**
- * 状态(0启用 1禁用)
- */
- private String status;
-
-
- }
2.定义UserDetailsServiceImpl类
- package com.sdkj.security.base;
-
- import com.sdkj.security.entity.system.LoginUser;
- import com.sdkj.security.entity.system.SysRole;
- import com.sdkj.security.entity.system.SysUser;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.security.core.userdetails.UserDetails;
- import org.springframework.security.core.userdetails.UserDetailsService;
- import org.springframework.security.core.userdetails.UsernameNotFoundException;
- import org.springframework.stereotype.Service;
-
- import java.util.HashSet;
- import java.util.Set;
-
- /**
- * 用户验证处理
- * @author javachen
- */
- @Service
- public class UserDetailsServiceImpl implements UserDetailsService
- {
- private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
-
- @Override
- public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
- {
- SysUser sysUser = new SysUser();
- sysUser.setId(123L);
- sysUser.setUserName("zhangsan");
- sysUser.setPassword("$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2");
-
- SysRole sysRole = new SysRole();
- sysRole.setId(1L);
- sysRole.setName("123");
- sysRole.setPermissionStr("rolePer");
-
- Set
str = new HashSet<>(); - str.add("per");
- return new LoginUser(sysUser,sysRole,str);
- }
-
- }