JavaWeb-SpringSecurity初認識

 

 

Spring Security 安全  百度百科html

  功能:Spring Security對Web安全性的支持大量地依賴於Servlet過濾器。這些過濾器攔截進入請求,而且在應用程序處理該請求以前進行某些安全處理。 Spring Security提供有若干個過濾器,它們可以攔截Servlet請求,並將這些請求轉給認證和訪問決策管理器處理,從而加強安全性。根據本身的須要,可使用適當的過濾器來保護本身的應用程序。
  若是使用過Servlet過濾器且令其正常工做,就必須在Web應用程序的web.xml文件中使用<filter> 和<filter-mapping>元素配置它們。雖然這樣作能起做用,可是它並不適用於使用依賴注入進行的配置。
  FilterToBeanProxy是一個特殊的Servlet過濾器,它自己作的工做並很少,而是將本身的工做委託給Spring應用程序上下文 中的一個Bean來完成。被委託的Bean幾乎和其餘的Servlet過濾器同樣,實現javax.servlet.Filter接 口,但它是在Spring配置文件而不是web.xml文件中配置的。
  實際上,FilterToBeanProxy代理給的那個Bean能夠是javax.servlet.Filter的任意實現。這能夠是 Spring Security的任何一個過濾器,或者它能夠是本身建立的一個過濾器。可是正如本書已經提到的那樣,Spring Security要求至少配置四個並且可能一打或者更多的過濾器。java

 

  總而言之:Spring Security 安全將咱們的服務器保護起來,訪問任何資源都須要身份認證。配置filter,SpringBoot以及自動幫咱們配置好,咱們不用管,能夠把Spring Security理解爲一系列攔截器。git

 

  整個項目基於github

  JavaWeb-RESTful(二)_使用SpringMVC開發RESTful_下  傳送門web

  

  系列博文spring

  項目已上傳至guthub  傳送門數據庫

  JavaWeb-SpringSecurity初認識  傳送門安全

  JavaWeb-SpringSecurity在數據庫中查詢登錄用戶  傳送門服務器

  JavaWeb-SpringSecurity自定義登錄頁面  傳送門app

  JavaWeb-SpringSecurity實現需求-判斷請求是否以html結尾  傳送門

  JavaWeb-SpringSecurity自定義登錄配置  傳送門

  JavaWeb-SpringSecurity圖片驗證ImageCode  傳送門

  JavaWeb-SpringSecurity記住我功能  傳送門

  JavaWeb-SpringSecurity使用短信驗證碼登錄  傳送門

 

  在GaryRESTful.config下建立java安全適配器類SecurityConfig.java

  配置SecurityConfig.java

    //表單驗證(身份認證)
    protected void configure(HttpSecurity http) throws Exception{
        http.formLogin()
            .and()
            //請求受權
            .authorizeRequests()
            //全部請求都被攔截,跳轉到(/login請求中)
            .anyRequest()
            //都須要咱們身份認證
            .authenticated();
    }

 

 

package com.Gary.GaryRESTful.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;


//Web應用安全適配器
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter{

    //表單驗證(身份認證)
    protected void configure(HttpSecurity http) throws Exception{
        http.formLogin()
            .and()
            //請求受權
            .authorizeRequests()
            //全部請求都被攔截,跳轉到(/login請求中)
            .anyRequest()
            //都須要咱們身份認證
            .authenticated();
    }
    
}
SecurityConfig.java

 

  spring Security 安全將咱們的服務器保護起來,訪問任何資源都須要身份認證,配置filter,SpringBoot以及自動幫咱們配置好,咱們不用管,能夠理解爲一系列的攔截器(filter)

 

 

 

  若是要設置本身用戶登錄的帳號密碼時,Security5版本規定了不能使用明文作密碼

  咱們可使用Security5自帶的PasswordEncoder作BCrypt加密設置

  在SecurityConfig.java中配置加密規則

    @Bean
    public PasswordEncoder passwordEncoder()
    {
        return new BCryptPasswordEncoder();
    }

 

  UserService中配置用戶登錄帳號密碼

    @Autowired
    private PasswordEncoder passwordEncoder;
    
    //spring security默認處理登錄(username爲輸入的username)
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // TODO Auto-generated method stub
        System.out.println(username);
        
        return new User(username,passwordEncoder.encode("123456"),AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
    }

 

 

package com.Gary.GaryRESTful.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;


//Web應用安全適配器
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter{

    //告訴SpringSecurity密碼用什麼加密的
    @Bean
    public PasswordEncoder passwordEncoder()
    {
        return new BCryptPasswordEncoder();
    }
    
    
    //表單驗證(身份認證)
    protected void configure(HttpSecurity http) throws Exception{
        http.formLogin()
            .and()
            //請求受權
            .authorizeRequests()
            //全部請求都被攔截,跳轉到(/login請求中)
            .anyRequest()
            //都須要咱們身份認證
            .authenticated();
    }
    
}
SecurityConfig.java

 

package com.Gary.GaryRESTful.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;


//用SprinSecurity默認的登錄系統
//UserService要實現UserDetailsService接口
@Component
public class UserService implements UserDetailsService{

    @Autowired
    private PasswordEncoder passwordEncoder;
    
    //spring security默認處理登錄(username爲輸入的username)
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // TODO Auto-generated method stub
        System.out.println(username);
        
        //用戶名,密碼,權限
        //User實現UserDetails接口
        return new User(username,passwordEncoder.encode("123456"),AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
    }

    
    
}
UserService.java
相關文章
相關標籤/搜索