《Spring实战》摘录 - 17

in #ievolution6 years ago

19-05-06-c0.jpg

161

Q: #9.1.3-2 | Spring Security必须配置在一个什么样的bean中
A: Spring Security必须配置在一个实现了WebSecurityConfigurer的bean中,或者(简单起见)扩展WebSecurityConfigurerAdapter



#162
Q: #9.1.3-2 | 为Spring MVC启用Web安全性功能的最简单配置
A:

package spitter. config:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 
import org.springframework.security.config.annotation.web.servlet.configuration.EnablewebMvcsecurity;

@Configuration
@EnableWebMvcSecurity//启用SpringMVC安全性
public class Securityconfig extends WebSecurityConfigurerAdapter {...}



#163
Q: #9.1.3-3 | @EnableWebMvcSecurity注解还配置了一个Spring MVC参数解析解析器(argument resolver)。这么做的好处?
A: 这样的话处理器方法就能够通过带有@AuthenticationPrincipal注解的参数获得认证用户的principal(或username)。它同时还配置了一个bean,在使用Spring表单绑定标签库来定义表单时,这个bean会自动添加一个隐藏的跨站请求伪造(cross-site request forgery,CSRF)token输入域。



#164
Q: #9.1.3-4 | 重载WebSecurityConfigurerAdapter的configure()方法
A:

  • configure(WebSecurity) --- 通过重载,配置Spring Security的Filter链
  • configure(HttpSecurity) --- 通过重载,配置如何通过拦截器保护请求
  • configure(AuthenticationManagerBuilder) --- 通过重载,配置user-detail服务



#165
Q: #9.1.3-5 | Spring Security满足我们应用的需求,还需要再添加一点配置。具体来讲,需要什么?
A:

  • 配置用户存储;
  • 指定哪些请求需要认证,哪些请求不需要认证,以及所需要的权限;
  • 提供一个自定义的登录页面,替代原来简单的默认登录页。



#166
Q: #9.2.1-1 | 配置Spring Security使用内存用户存储的代码
A:

package spitter. config:

import org.springframework.beans.factory.annotation.Autowired:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity: 

@configuration
@EnablewebMvcsecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure( AuthenticationManagerBuilder auth) throws Exception( 
        auth
        .inMemoryAuthentication()  //启用内存用户存储
        .withuser("user").password("password").roles("USER").and() 
        .withUser("admin").password("password").roles("USER","ADMIN");
    }
}



#167
Q: #9.2.1-2 | 配置用户详细信息的方法
A:

  • accountExpired(boolean) --- 定义账号是否已经过期
  • accountLocked(boolean) --- 定义账号是否已经锁定
  • and() --- 用来连接配置
  • authorities(GrantedAuthority...) --- 授予某个用户一项或多项权限
  • authorities(List<? extends GrantedAuthority>) --- 授予某个用户一项或多项权限
  • authorities(String...) --- 授予某个用户一项或多项权限
  • credentialsExpired(boolean) --- 定义凭证是否已经过期
  • disabled(boolean) --- 定义账号是否已被禁用
  • password(String) --- 定义用户的密码
  • roles(String...) --- 授予某个用户一项或多项角色



#168
Q: #9.2.1-3 | 为了配置Spring Security使用以JDBC为支撑的用户存储,所需的最少配置如下所示(代码)
A:

@Autowired
DataSource dataSource;

@Override
protected void configure(AuthenticationManagerBuilder auth)
                                                   throws Exception {
  auth
    .jdbcAuthentication()
      .dataSource(dataSource);
}



#169
Q: #9.2.4 | 假设我们需要认证的用户存储在非关系型数据库中,如Mongo或Neo4j,在这种情况下,我们需要提供一个自定义的UserDetailsService接口实现。其中userDetailService如何写?
A:

public interface UserDetailsService {
  UserDetails loadUserByUsername(String username)
                                     throws UsernameNotFoundException;
}



#170
Q: #9.3-1 | 对每个请求进行细粒度安全性控制的关键在于重载configure(HttpSecurity)方法。如下的代码片段展现了重载的configure(HttpSecurity)方法,它为不同的URL路径有选择地应用安全性
A:

@Override
protected void configure(HttpSecurity http) throws Exception {
  http
    .authorizeRequests()
      .antMatchers("/spitters/me").authenticated()
      .antMatchers(HttpMethod.POST, "/spittles").authenticated()
      .anyRequest().permitAll();
}

Coin Marketplace

STEEM 0.14
TRX 0.23
JST 0.031
BTC 83984.44
ETH 2068.83
USDT 1.00
SBD 0.63