Spring Security是基于Spring框架,提供的一套Web应用安全性的完整解决方案,一般来说,Web应用的安全性包括用户认证和用户授权两个部分。
(1)用户认证指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访间该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
(2)用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应系列的权限。
Spring Security其实就是用fter,多请求的路径进行过滤
1)如果是基于 Session,那么 Spring-security会对 cookie里的 sessioni进行解析,找到服务器存储的 sesion信息,然后判断当前用户是否符合请求的要求。
2)如果是 token,则是解析出 token,然后将当前请求加入到 Spring-security管理的权限信息中去。
认证与授权实现思路:
认证与授权实现思路如果系统的模块众多,每个模块都需要就行授权与认证,所以我们选择基于 token的形式进行授权与认证,用户根据用户名密码认证成功,然后获取当前用户角色的一系列权限值,并以用户名为key,权限列表为vaue的形式存入 Redis缓存中,根据用户名相关信息生成 token返回,浏览器将 token记录到 cookie中,每次调用api接口都默认将 token携带到 header请求头中, Spring- security解析header头获取 token信息,解析toke获取当前用户名,根据用户名就可以从 redis中获取权限列表,这样 Spring- securit就能够判断当求是否有权限访问。
之后开始创建个安全模块接着引入依赖
<!-- Spring Security依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> </dependency>这边有整合好的代码:https://download.csdn.net/download/qq_39693164/12807266
下面是需要修改的地方
另外,代码里还需要两个工具类
MD5.java
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public final class MD5 { public static String encrypt(String strSrc) { try { char hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; byte[] bytes = strSrc.getBytes(); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(bytes); bytes = md.digest(); int j = bytes.length; char[] chars = new char[j * 2]; int k = 0; for (int i = 0; i < bytes.length; i++) { byte b = bytes[i]; chars[k++] = hexChars[b >>> 4 & 0xf]; chars[k++] = hexChars[b & 0xf]; } return new String(chars); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); throw new RuntimeException("MD5加密出错!!+" + e); } } public static void main(String[] args) { System.out.println(MD5.encrypt("111111")); } }ResponseUtil.java
import com.guigu.commonutils.R; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class ResponseUtil { public static void out(HttpServletResponse response, R r) { ObjectMapper mapper = new ObjectMapper(); response.setStatus(HttpStatus.OK.value()); response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE); try { mapper.writeValue(response.getWriter(), r); } catch (IOException e) { e.printStackTrace(); } } }接下来将这个Spring Security模块引入到需要的模块pom文件中
接下来在需要在获取用户信息的实现方法上中实现一个接口 UserDetailsService