Spring Security怎么自定义登录页? 怎么注销?

背景

前面章节你会发现, spring security生成的登录页特丑, 忍不了

本章内容

  • 怎么自定义登录页
  • 底层都怎么实现
  • 如何注销?
  • 注销底层源码简单分析

开干

  1. 去网上找个好看的前端, 改改
  2. 改改spring security配置
  3. 启动

几个红框框的地方注意下

@Configuration
public class SecurityConfig {
   
   @Bean
   public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
      http.authorizeRequests()
            .antMatchers("/css/**", "/images/**", "/js/**").permitAll()
            .anyRequest().authenticated();
      
      http.formLogin(formLoginConfigurer -> {
         formLoginConfigurer.loginPage("/login.html");
         formLoginConfigurer.loginProcessingUrl("/doLogin");
         formLoginConfigurer.defaultSuccessUrl("/hello", true);
         formLoginConfigurer.permitAll();
      });
      
      http.csrf().disable();
      
      return http.build();
   }
   
}
复制代码
server:
  port: 8080
spring:
  security:
    user:
      name: zhazha
      password: "{noop}123456"
复制代码

都什么意思?

为什么spring security知道我们自定义了?

我们设置的loginPage地址去哪了?

我们配置的loginProcessingUrl在底层怎么玩?

前端已经用到这个地址了, 服务端只需要做个匹配器就好, 如果满足匹配器条件, 执行某个过滤器, 否则不执行过滤器

这个类可不得了 AbstractAuthenticationProcessingFilter, 看他实现就知道了

也就是说, 只要客户端请求了/doLogin, 就会被 AbstractAuthenticationProcessingFilter 过滤器匹配, 该过滤器就会拦截请求

又上面那个过滤器是抽象类, 最终一般都是UsernamePasswordAuthenticationFilter

spring security的匹配器和过滤器之间的关系类似于spring gateway的 predicates和filter, 也就是 kv 结构, k负责匹配, v负责功能

最后的permitAll呢?

默认是 true

几个地址都加入白名单

自定义表单属性

如果你前端请求传递给你的参数并不是 username 和 password 怎么办?

  1. 跟他说, 叫他改, 我喜欢, 约定大于配置
  2. 前端是老大, 我听他的
  3. 出去打一架

注销怎么拿捏?

// 注销
http.logout(logoutConfigurer -> {
   logoutConfigurer.invalidateHttpSession(true);
   logoutConfigurer.clearAuthentication(true);
   logoutConfigurer.permitAll();
});
复制代码

完事~~~ 本章结束

源码分析

核心接口:

注销的过滤器:

LogoutFilter
复制代码

invalidateHttpSession和clearAuthentication函数做了啥?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配置Spring Security的访问权限可以通过以下步骤实现: 1. 添加Spring Security依赖:在项目的pom.xml文件中添加Spring Security的依赖项。 2. 创建Security配置类:创建一个继承自WebSecurityConfigurerAdapter的配置类,并使用@EnableWebSecurity注解标记。 3. 配置认证信息:在配置类中重写configure(AuthenticationManagerBuilder auth)方法,通过auth对象配置用户的认证信息。可以使用内存中的用户、数据库中的用户或自定义的用户认证服务。 4. 配置访问权限:在配置类中重写configure(HttpSecurity http)方法,通过http对象配置URL的访问权限。可以设置哪些URL需要认证,哪些URL不需要认证,以及不同角色的用户可以访问哪些URL。 5. 配置登录面:如果需要自定义登录面,可以在配置类中重写configure(HttpSecurity http)方法,通过http对象配置登录面的URL和相关参数。 6. 配置注销功能:如果需要支持用户注销功能,可以在配置类中重写configure(HttpSecurity http)方法,通过http对象配置注销功能的URL和相关参数。 7. 配置跨域资源共享(CORS):如果需要支持跨域访问,可以在配置类中重写configure(HttpSecurity http)方法,通过http对象配置CORS相关参数。 8. 配置其他安全特性:根据需求,可以在配置类中重写configure(HttpSecurity http)方法,通过http对象配置其他安全特性,如CSRF保护、HTTP方法的安全性等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值