banner
RustyNail

RustyNail

coder. 【blog】https://rustynail.me 【nostr】wss://ts.relays.world/ wss://relays.world/nostr

spring Security 集成到SpringBoot项目

spring security 是一个用于权限验证和资源权限管理的的一个库。简单的记录一下,spring security 集成到 spring boot

项目中的过程。

WebSecurityConfiguration#

主要是一个WebSecurityConfiguration

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
        		.userDetailsService(getUserDetailsService())
                .passwordEncoder(new PasswordEncoder() {
                    @Override
                    public String encode(CharSequence rawPassword) {
                        return rawPassword.toString();
                    }

                    @Override
                    public boolean matches(CharSequence rawPassword, String encodedPassword) {
                        return rawPassword.toString().equals(encodedPassword);
                    }
                });
    }
  • 继承WebSecurityConfigurerAdapter, 然后重写这个configure方法,

可以设置用户的来源: userDetailsService(UserDetailsService uds) ,UserDetailsService 决定了用户怎么来的。

比如:通过用户名从数据库查询

@Bean
    public UserDetailsService getUserDetailsService(){
        return username -> {
            SysUser user = userRepository.getSysUserByUsername(username);
            if (user != null){
                return user;
            }else {
                throw new UsernameNotFoundException("no such user name.");
            }
        };
   }
  • 可以设定密码的验证机制
.passwordEncoder(new PasswordEncoder() {
      @Override
    public String encode(CharSequence rawPassword) {
     	return rawPassword.toString();
  	}

    @Override
    public boolean matches(CharSequence rawPassword, String encodedPassword) {
      return rawPassword.toString().equals(encodedPassword);
	}
});

可以设置密码的加密和匹配方式

对请求进行权限控制#

提供了如 csrf 等功能,

  • csrf
  • antMatchers
  • formLogin
  • logout

等,对这些可以进一步设置

  • disable() 如 csrf
  • permitAll() 不要权限
  • authenticated() 需要权限

等。

例子:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf()
                .and()
                .authorizeRequests()
                .antMatchers("/api/*")
                    .authenticated()
                .antMatchers("/")
                    .authenticated()
                .and()
                .formLogin()
                    .loginPage("/login/page")
                    .defaultSuccessUrl("/out")
                    .loginProcessingUrl("/login")
                    .failureUrl("/e")
                    .permitAll()
                .and()
                .logout()
                    .logoutUrl("/logout")
                    .logoutSuccessUrl("/out")
                .permitAll();

        CsrfFilter csrfFilter = new CsrfFilter();
        http.addFilterAfter(csrfFilter,CsrfFilter.class);

    }
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。