1、在common下创建spring_security模块


2、在spring_security引入相关依赖
<dependencies>
<dependency>
<groupId>com.nanjing</groupId>
<artifactId>common_utils</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- Spring Security依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
</dependencies>

3、创建包com.nanjing.serurity,拷贝代码

代码结构说明:
其中TokenWebSecurityConfig中注入的UserDetailsService是查询用户名和密码的

在service_acl模块中创建UserDetailsServiceImpl,pom.xml文件引入spring_security模块
package com.nanjing.aclservice.service.impl;
import com.nanjing.aclservice.entity.User;
import com.nanjing.aclservice.service.PermissionService;
import com.nanjing.aclservice.service.UserService;
import com.nanjing.serurity.entity.SecurityUser;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
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.List;
/**
* <p>
* 自定义userDetailsService - 认证用户详情
* </p>
*
* @author qy
* @since 2019-11-08
*/
@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
@Autowired
private PermissionService permissionService;
/***
* 根据账号获取用户信息
* @param username:
* @return: org.springframework.security.core.userdetails.UserDetails
*/
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 从数据库中取出用户信息
User user = userService.selectByUsername(username);
// 判断用户是否存在
if (null == user){
//throw new UsernameNotFoundException("用户名不存在!");
}
// 返回UserDetails实现类
com.nanjing.serurity.entity.User curUser = new com.nanjing.serurity.entity.User();
BeanUtils.copyProperties(user,curUser);
List<String> authorities = permissionService.selectPermissionValueByUserId(user.getId());
SecurityUser securityUser = new SecurityUser(curUser);
securityUser.setPermissionValueList(authorities);
return securityUser;
}
}


不报红叉了

Spring Security代码执行过程

本文介绍了如何在Spring Boot项目中创建Spring Security模块并引入相关依赖,包括Spring Boot的spring-boot-starter-security和jjwt库。接着展示了UserDetailsService的实现,用于查询用户信息,并在service_acl模块中创建对应的Service。整个流程详细解释了Spring Security的代码执行过程,确保用户认证的顺利进行。
6383





