Spring-boot & spring.security


spring.security提供了一種身份認證框架,開發者可以在這個框架中實現各種方式的用戶身份管理,比如:LDAP、MYSQL、OAUTH、Mongo等等。

spring.security認證步驟:

1、配置類 WebSecurityConfigurerAdapter

    該類中通過configure 各種參數來關聯前端頁面提交的身份信息和后端數據服務提供的身份信息。其中,

    1)configure( HttpSecurity http)配置前端,各種頁面的訪問權限和登錄頁、用戶名、密碼的綁定信息

http.authorizeRequests()
                .antMatchers("/", "/public/**").permitAll()
                .antMatchers("/users/**").hasAuthority("ADMIN")
                .anyRequest().fullyAuthenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .failureUrl("/login?error")
                .usernameParameter("email")
                .permitAll()
                .and()
                .logout()
                .logoutUrl("/logout")
                .deleteCookies("remember-me")
                .logoutSuccessUrl("/")
                .permitAll()
                .and()
                .rememberMe();

  2)configure(AuthenticationManagerBuilder auth)配置關聯后端的身份數據信息提供源

    //DAO模式
    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService)
            .passwordEncoder(new BCryptPasswordEncoder());
    }

  spring.security在認證過程中調用userDetailsService實例的loadUserByUsername獲取后端對應的身份認證信息,如果找不到則拋出UsernameNotFoundException

異常。

2. Controller中配置API的授權訪問約束

      @PreAuthorize("@currentUserServiceImpl.canAccessUser(principal, #id)")
    @RequestMapping("/user/{id}")
    public ModelAndView getUserPage(@PathVariable Long id) {
     ... }


@PreAuthorize("hasAuthority('ADMIN')")
    @RequestMapping(value = "/user/create", method = RequestMethod.GET)
    public ModelAndView getUserCreatePage() {

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM