springSecurtiy作为重量级的安全框架。与spring无缝衔接。
一、jar包依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring sercurity安全框架 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
继承类WebSercuityConfigurerAdapter,对serurity进行配置,可实现其中的三个配置方法。目前只使用一个作为入门操作
@Override
protected void configure(HttpSecurity http) throws Exception {
//禁用crsf
http.csrf().disable();
http
// 开始请求权限配置
.authorizeRequests()
// 我们指定任何用户都可以访问多个URL的模式。
// 任何用户都可以访问以"/resources/","/signup", 或者 "/about"开头的URL。
.antMatchers("/css/**","/img/**","/js/**","/plugins/**","/elementuidemo/**").permitAll()
// 请求匹配 /admin/** 只拥有 ROLE_ADMIN 角色的用户可以访问
.antMatchers("/pages/**").hasRole("ADMIN")
// 请求匹配 /user/** 拥有 ROLE_ADMIN 和 ROLE_USER 的角色用户都可以访问
//.antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
// 任何以"/xxx/" 开头的URL需要同时具有 "ROLE_ADMIN" 和 "ROLE_DBA"权限的用户才可以访问。
// 和上面一样我们的 hasRole 方法也没有使用 "ROLE_" 前缀。
// .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")
// 其余所有的请求都需要认证后才可以访问
.anyRequest().authenticated()
.and()
.formLogin()
// 登陆界面;默认登陆失败的界面;表单提交地址
.loginPage("/pages/login.html")
//登陆成功的处理类,需要继承SavedRequestAwareAuthenticationSuccessHandler类
.successHandler(securityAuthenctiationSuccessHandler)
//登录处理接口,随便写一个地址,这个地址可以不存在,但是需要与表单提交的地址一样
.loginProcessingUrl("/login.do")
//.successForwardUrl("/loginSuccess")
//登陆失败的url
//.failureUrl("")
//默认登陆成功后的界面 不起作用 ;
.defaultSuccessUrl("/pages/main.html",true).permitAll();
//表单提交地址
//.failureUrl("/login?error=true")
// 设置可以iframe访问
http.headers().frameOptions().sameOrigin();
}
需要在启动类获取配置类上打上@EnableWebSecurity注解。使其生效
以及用于用户校验操作的UserDetailsService接口,实现方法 public UserDetails loadUserByUsername(String username)
springSecurity默认采用BCryptPasswordEncoder作为密码的加密操作;
@Component
public class SecurityUserDetails implements UserDetailsService {
@Autowired
PasswordEncoder passwordEncoder;
/* 对用户进行权限的查询以及密码的查询 */
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserDetails userDetails =null;
/* 查询用户权限, */
Collection<GrantedAuthority> authoritiesList = getAuthorities();
userDetails = new User(username,passwordEncoder.encode("123456"),authoritiesList);
return userDetails;
}
/* Query database setting permission */
private Collection<GrantedAuthority> getAuthorities(){
List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>();
authList.add(new SimpleGrantedAuthority("ROLE_USER"));
authList.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
return authList;
}
/* 指定加密格式 */
@Bean
public PasswordEncoder getPasswordEncoder(){
return new BCryptPasswordEncoder();
}
}