spring boot(五)spring security

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();

}

相關文章
相關標籤/搜索