首页 > 其他分享 >springsecurity 6.x

springsecurity 6.x

时间:2023-09-25 10:26:54浏览次数:39  
标签:http admin springsecurity api logout user login

springboot + springsecurity6.x的配置securityConfig.java

登录页面的DIY

@Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(author ->
                    author.requestMatchers("/login").permitAll()
                    .anyRequest().authenticated()
        );
        //登录页面和登录接口的设置
        http.formLogin(login->
            login.loginPage("/login").permitAll()  // 登录页面,走自己的路由
                    .loginProcessingUrl("/login") // 登录接口,也可以DIY
                    .defaultSuccessUrl("/index")
        );

        http.csrf(Customizer.withDefaults()); //csrf漏洞防御
        http.logout(logout-> logout.invalidateHttpSession(true));// logout设置
        return http.build();
    }

认证和授权

  • 权限管理
@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(author ->
              // 权限
            author
                    .requestMatchers("/admin/api").hasAuthority("admin:api")
                    .requestMatchers("/user/api").hasAnyAuthority("admin:api","user:api")
                    .requestMatchers("/app/api").permitAll()
                    .requestMatchers("/login").permitAll()
                    .anyRequest().authenticated()
        );
        http.exceptionHandling(e -> e.accessDeniedPage("/noAuth/api"));
        http.formLogin(login->
            login.loginPage("/login").permitAll()
                    .loginProcessingUrl("/login")
                    .defaultSuccessUrl("/index")
        );
        http.csrf(Customizer.withDefaults());
        http.logout(logout-> logout.invalidateHttpSession(true));
        return http.build();
    }

    @Bean // 认证
    public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
        UserDetails admin = User.withUsername("admin").password(passwordEncoder().encode("root"))
                .authorities("admin:api","user:api").build();
        UserDetails user = User.withUsername("user").password(passwordEncoder().encode("root"))
                .authorities("user:api").build();
        return new InMemoryUserDetailsManager(admin,user);
    }

    @Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}
  • 角色管理
@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(author ->
                // 配置角色,进行权接口权限的分配
            author
                    .requestMatchers("/admin/api").hasRole("admin")
                    .requestMatchers("/user/api").hasAnyRole("user","admin")
                    .requestMatchers("/app/api").permitAll()
                    .requestMatchers("/login").permitAll()
                    .anyRequest().authenticated()
        );
		// 没有权限异常处理页面跳转
        http.exceptionHandling(e -> e.accessDeniedPage("/noAuth/api"));

        http.formLogin(login->
            login.loginPage("/login").permitAll()
                    .loginProcessingUrl("/login")
                    .defaultSuccessUrl("/index")
        );
        http.csrf(Customizer.withDefaults());
		
		// logout接口
        http.logout(logout-> logout.invalidateHttpSession(true));
        return http.build();
    }

    @Bean
    public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
	//注意这里也要加密,相当与数据库中的密码存储的应该是密文
        UserDetails admin = User.withUsername("admin").password(passwordEncoder().encode("root")).roles("admin","user").build();
        UserDetails user = User.withUsername("user").password(passwordEncoder().encode("root")).roles("user").build();
        return new InMemoryUserDetailsManager(admin,user);
    }
	// 这个是明文加密,前端输入的密码,加密后与数据库中的比较
    @Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}

ant匹配模式(略)

? 表示匹配单个字符
* 表示匹配0到任意个字符
** 表示匹配到任意个目录

标签:http,admin,springsecurity,api,logout,user,login
From: https://www.cnblogs.com/maoshine/p/17727304.html

相关文章

  • [SpringSecurity5.6.2源码分析十三]:LogoutFilter
    前言• SpringSecurity默认提供了登录的页面以及登录的接口,与之对应的也提供了登出页和登出请求• 登出请求对应的过滤器是LogoutFilter• 登出页对应的是DefaultLogoutPageGeneratingFilter、1.LogoutConfigurer• LogoutConfigurer是LogoutFilter对应的配置类,先看其主要方法......
  • SpringSecurity用户登录限制
    本次给你介绍只允许用户在一个地方登录,也就是说每个用户只允许有一个Session。他有两种场景如果同一个用户在第二个地方登录,则将第一个登录下线如果同一个用户在第二个地方登录,则不允许二次的登录同一个用户在第二个地方登录,则将第一个登录退出具体步骤如下:重构com.security.learn.......
  • [SpringSecurity5.6.2源码分析十二]:CsrfFilter
    前言• Csrf(跨站伪造请求):指的是用户在A网站认证完成后,A网站Cookie保存在了浏览器中,然后用户在B网站点击了钓鱼链接,使其让钓鱼请求带有了A网站的Cookie,从而让A网站认为这是一次正常的请求• 而SpringSecurity采用的是同步令牌模式(SynchronizerTokenPattern)来预防Csrf攻击•......
  • SpringSecurity
     1.什么是SpringSecurity进入移动互联网时代,大家每天都在刷手机,常用的软件有微信、支付宝、头条等,下边拿微信来举例子说明认证相关的基本概念,在初次使用微信前需要注册成为微信用户,然后输入账号和密码即可登录微信,输入账号和密码登录微信的过程就是认证。系统为什么要认证?......
  • [SpringSecurity5.6.2源码分析十一]:CorsFilter
    前言• 跨域:两个域名的(协议、域名/ip、端口)有任意一个不同即视为跨域• 跨域资源共享(Cors):即浏览器允许访问其他跨域的资源• 而CorsFilter就是SpringSecurity用来处理Cors的过滤器1.CorsConfigurer• CorsConfigurer是CorsFilter对应的配置类,其中就只有一个重要方法• co......
  • [SpringSecurity5.6.2源码分析十]:HeaderWriterFilter
    前言• 为了安全考虑,添加启用浏览器保护的某些头是很有用的,比如X-Frame-Options,X-XSS-Protection和X-Content-Type-Options• 而HeaderWriterFilter就支持往响应头写入各种响应头1、HeadersConfigurer• HeadersConfigurer是HeaderWriterFilter对应的配置类,是在获取HttpSecur......
  • [SpringSecurity5.6.2源码分析八]:SecurityContextPersistenceFilter
    前言• 当我们不在其他线程而就在容器创建的线程中使用SecurityContextHolder.getContext()获取SecurityContext的时候,正常都能获取到• SecurityContext默认是放在线程中的,所以说在某个地方一定将SecurityContext放到线程中,而这个类就是SecurityContextPersistenceFilter1、Secu......
  • [SpringSecurity5.2.2源码分析七]:WebAsyncManagerIntegrationFilter
    1、作用• 是为了接口返回异步对象,然后执行异步任务也能通过SecurityContextHolder获取SecurityContext• 比如说返回值是WebAsyncTask的时候2、WebAsyncManagerIntegrationFilter• 源码很短就是在WebAsyncManager中注册了SecurityContextCallableProcessingInterceptorpublic......
  • [SpringSecurity5.6.2源码分析六]:ChannelProcessingFilter
    1、基础用法• ChannelProcessingFilter是SpringSecurity的第一个过滤器,具体排序规则见FilterComparator,image.png• 主要作用:可限制服务端接受的安全协议,比如说仅支持Https或者Http1.1开启配置类:• 首先我们注册到容器中的WebSecurityConfigurerAdapter是针对于WebSecurity的......
  • SpringSecurity中注解讲解
    目录[email protected]@PreAuthorize1.1.1开启注解1.1.2使用注解原生方法1.1.3使用注解自定义方法[email protected]@Secured2其他注解[email protected]@PreFilter3权限表达式1@EnableGlobalMethodSecurity@EnableGlobalMethodSecurity是Spring......