Spring security正則表達式
1.認證Authentication,確認用戶能夠訪問當前系統spring
重寫protect void configure(AuthenticationManagerBuilder auth){sql
1. auth.inMemoryAuthentication()數據庫
.withUser(「ss」).password(「ss」).roles(「ROLE_ADMIN」);//內存中的用戶安全
2. auth.jdbcAuthentication().dataSource(dataSource) //jdbc中的用戶cookie
(Spring security中默認了數據庫的結構,能夠自定義查詢用戶和權限的sql語句)框架
3. auth.userDetaisService(customUserService) //通用的用戶,見下:ide
}ui
通用的用戶:數據訪問不單單是內存或jdbc,還多是非關係型數據庫,或JPA,須要自定義實現UserDetailService接口spa
//自定義類CustomUserService實現UserDetailsService接口
public class CustomUserService implements UserDetailsService{
@Autowired
SysUserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String name){
//SysUser是系統的用戶領域類對象
SysUser user = userRepository.findbyUsername(name);
List<GrantedAuthority> authoritys = new ArrayList<GrantedAuthority>();
authoritys.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
//User來自於spring security框架
return new User(user.getUsername(),user.getPassword(),authoritys);
}
}
//註冊這個實現類
@Bean
UserDetaisService customUserService(){
return new CustomUserService();
}
2.受權Authorization,確認用戶在當前系統下所擁有的功能權限
重寫protected void configure(HttpSecurity http)
請求攔截路徑匹配器:
autMatchers:使用ant風格的路徑匹配
regexMatchers:正則表達式匹配路徑
anyRequest:匹配全部的請求路徑
匹配請求路徑後,進行安全處理,Spring security提供了安全處理方法:
access(String)spring el表達式爲true時可訪問;
denyAll()用戶不能訪問;
permitAll()用戶能夠任意訪問
authenticated()用戶登陸後能夠訪問
… …
如:@Override
protected void configure(HttpSecurity http){
http.authorizeRequests() //開始請求權限配置
.autMatchers("/admin/**").hasRole("ROLE_ADMIN")
.autMatchers("/user/**").hasAnyRole("ROLE_ADMIN","ROLE_USER")
.anyRequest().authenticted();//其他全部用戶都須要認證後(登錄後)才能夠訪問
}
定製登陸行爲:
@Override
protected void configure(HttpSecurity http){
http.fromLogin() //定製登陸操做
.loginPage("/login")
.defaultSuccessUrl("/index")
.failureUrl("/login?error")
.permitAll()
.and()
.rememberMe() //開啓cookie存儲用戶信息
.tokenValiditySeconds(1209600)
.key("myKey")
.and()
.logout()
.logoutUrl("/custome-logout")
.logoutSuccessUrl("/logout-success")
.permitAll();
}