pom.xml引入SpringSecurity包

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-security</artifactId>
  4. </dependency>

可以拓展WebSecurityConfigurerAdapter方式做全局的权限控制

  • 权限控制可能使用的时JPA,而非Ibatis等,这种方式直接设置全局的,并不需要If/else等判断逻辑。

  • 这里以user/123456为例 ,但是注意现实使用时不要使用弱口令。

  • 新版SpringBoot更新,要求使用BCryptPasswordEncoder这些来先加密。

  1. import org.springframework.context.annotation.Configuration;
  2. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
  3. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  4. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
  5. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  6. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  7. @Configuration
  8. @EnableWebSecurity
  9. public class SecurityConfig extends WebSecurityConfigurerAdapter {
  10. /**定义认证用户信息获取来源,密码校验规则等*/
  11. @Override
  12. protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  13. //inMemoryAuthentication 从内存中获取
  14. auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("user").password(new BCryptPasswordEncoder().encode("123456")).roles("USER");
  15. //jdbcAuthentication从数据库中获取,但是默认是以security提供的表结构
  16. //usersByUsernameQuery 指定查询用户SQL
  17. //authoritiesByUsernameQuery 指定查询权限SQL
  18. //auth.jdbcAuthentication().dataSource(dataSource).usersByUsernameQuery(query).authoritiesByUsernameQuery(query);
  19. //注入userDetailsService,需要实现userDetailsService接口
  20. //auth.userDetailsService(userDetailsService);
  21. }
  22. /**定义安全策略*/
  23. @Override
  24. protected void configure(HttpSecurity http) throws Exception {
  25. http.authorizeRequests()//配置安全策略
  26. .antMatchers("/","/hello").permitAll()//定义/请求不需要验证
  27. .anyRequest().authenticated()//其余的所有请求都需要验证
  28. .and()
  29. .logout()
  30. .permitAll()//定义logout不需要验证
  31. .and()
  32. .formLogin();//使用form表单登录
  33. }
  34. }

参考逻辑表如下

【20180925】SpringBoot   SpringSecurity自带认证及权限控制 - 图1

参考资料