Spring Security简介

Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的 成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方 案。 正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”(或者访问控 制),一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权 (Authorization)两个部分,这两点也是 Spring Security 重要核心功能。 (1)用户认证指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问 该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认 证过程。通俗点说就是系统认为用户是否能登录 (2)用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户 所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以 进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的 权限。通俗点讲就是系统判断用户是否有权限去做某些事情

SpringSecurity 本质是一个过滤器链:

代码底层流程:重点看三个过滤器: FilterSecurityInterceptor:是一个方法级的权限过滤器, 基本位于过滤链的最底部 ExceptionTranslationFilter:是个异常过滤器,用来处理在认证授权过程中抛出的异常 UsernamePasswordAuthenticationFilter :对/login 的 POST 请求做拦截,校验表单中用户名,密码。

 

 

 

SpringSecurity Web 权限方案

设置登录系统的账号、密码 方式一:在 application.properties spring.security.user.name=atguigu spring.security.user.password=atguigu

方式二:编写配置文件 package com.atguigu.config; @Configuration public class SecurityConfig { BCryptPasswordEncoder passwordEncoder=new BCryptPasswordEncoder(); String password=passwordEncoder.encode("123"); auth.inMemoryAuthentication().withUser("lucy").password(password).roles("admin") ;@Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } }

方式三:实现接口UserDetailsService

自定义实现类设置

第一步 创建配置类,设置使用哪个userDetailsService实现类

 

 第二步 编写实现类,返回User对象,User对象有用户名密码和操作权限

 

 

 

 

自定义设置登录页面、路径、跳转

 

 

 

自定义登录页面

<form action="/login"method="post"> 用户名:<input type="text"name="username"/><br/> 密码:<input type="password"name="password"/><br/> <input type="submit"value=" 提交"/> </form> 页面提交方式必须为 post 请求,所以上面的页面不能使用,用户名,密码必须为username,password 原因: 在执行登录的时候会走一个过滤器 UsernamePasswordAuthenticationFilter

 

 

如果修改配置可以调用 usernameParameter()和 passwordParameter()方法

 

基于角色或权限进行访问控制 配置文件和MyUserDetailsService分别设置

 

 

 

 

用户没有访问权限时会返回403页面

 

 

也可以自定义403页面,需要修改配置文件

 

 

用户注销

在配置类中添加退出配置 //退出 http.logout().logoutUrl("/logout").logoutSuccessUrl("/test/hello").permitAll();

 

posted @ 2022-06-13 14:11  zwbsoft  阅读(154)  评论(0编辑  收藏  举报