java B2B2C Springcloud電子商務平臺源碼-security簡單使用

security的簡單原理:html

須要JAVA Spring Cloud大型企業分佈式微服務雲構建的B2B2C電子商務平臺源碼:壹零叄八柒柒肆六二六java

使用衆多的攔截器對url攔截,以此來管理權限。可是這麼多攔截器,不可能對其一一來說,主要講裏面核心流程的兩個。web

首先,權限管理離不開登錄驗證的,因此登錄驗證攔截器AuthenticationProcessingFilter要講;還有就是對訪問的資源管理吧,因此資源管理攔截器AbstractSecurityInterceptor要講;但攔截器裏面的實現須要一些組件來實現,因此就有了AuthenticationManager、accessDecisionManager等組件來支撐。spring

如今先大概過一遍整個流程,用戶登錄,會被AuthenticationProcessingFilter攔截,調用AuthenticationManager的實現,並且AuthenticationManager會調用ProviderManager來獲取用戶驗證信息(不一樣的Provider調用的服務不一樣,由於這些信息能夠是在數據庫上,能夠是在LDAP服務器上,能夠是xml配置文件上等),若是驗證經過後會將用戶的權限信息封裝一個User放到spring的全局緩存SecurityContextHolder中,以備後面訪問資源時使用。數據庫

訪問資源(即受權管理),訪問url時,會經過AbstractSecurityInterceptor攔截器攔截,其中會調用FilterInvocationSecurityMetadataSource的方法來獲取被攔截url所需的所有權限,在調用受權管理器AccessDecisionManager,這個受權管理器會經過spring的全局緩存SecurityContextHolder獲取用戶的權限信息,還會獲取被攔截的url和被攔截url所需的所有權限,而後根據所配的策略(有:一票決定,一票否認,少數服從多數等),若是權限足夠,則返回,權限不夠則報錯並調用權限不足頁面。緩存

雖然講得好像好複雜,讀者們可能有點暈,不過不打緊,真正經過代碼的講解在後面,讀者能夠看完後面的代碼實現,再返回看這個簡單的原理,可能會有不錯的收穫。bash

在spring boot中使用security 首先導入spring security的包:服務器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
複製代碼

在spring security中有一個很是重要的配置類須要編寫 就是繼承這個抽象類WebSecurityConfigurerAdapter,以下代碼所示 這個bean的目的是將咱們的用戶存到內存中,這個用於調試仍是能夠的,可是咱們開發中是不存在這樣的mybatis

@Bean
        @Override
        protected UserDetailsService userDetailsService(){
            InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
            manager.createUser(User.withUsername("user_1").password("123456").authorities("USER").build());
            manager.createUser(User.withUsername("user_2").password("123456").authorities("USER").build());
            return manager;
        }

複製代碼

上面這步完成後還須要咱們將userdetail的類給添加到攔截器中,由於咱們登陸是須要進行驗證用戶的,因此能夠直接mvc

@Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(userDetailsService);
        }
複製代碼

這裏面還能夠設置其餘參數,好比加密的方式以及其餘等等。 在這個類中海能夠設置一寫忽略的攔截類,即不須要進行驗證的

/** 
* 忽略設置的接口 
*/

@Override
  public void configure(WebSecurity web) throws Exception {
    String ignoring = env.getProperty("msi.auth.ignoring","/health|/info");
    web.ignoring().antMatchers(ignoring.split("\\|"));
  }
複製代碼

無論是使用哪一種方式,將用戶存到內存或者存到數據庫操做,都須要將操做放到

@Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(userDetailsService);
        }

複製代碼

java B2B2C springmvc mybatis電子商務平臺源碼

相關文章
相關標籤/搜索