spring security(一)

xianyuuu發表於2020-12-13

本文是個人向的

@Configuration
public class SecurityConfig  extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/common/**").permitAll()
                .antMatchers("/user/**").hasRole("USER")
                .antMatchers("/admin/**").hasRole("ADMIN")
                .anyRequest()
                .authenticated()
                .and()
                .formLogin()
                .and()
                .csrf().disable();
            

    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("user")
                .password("{noop}123")
                .roles("USER");
    }
}

這是基本配置,建立了一個使用者名稱是user,密碼是123的使用者,{noop}表示不用加密,另外在這種配置裡面角色不需要加ROLE字首。

@RestController
@RequestMapping("user")
public class UserController {

        @GetMapping
        public String query(){
            return "i am user";
        }


}

@RestController
@RequestMapping("admin")
public class AdminController {

    @GetMapping
    public String query(){
        return "i am admin";
    }
}

@RestController
@RequestMapping("common")
public class CommonController {

    @GetMapping
    public String query(){
        return "i am common";
    }

}

這是三個訪問路徑,啟動之後可以發現common開頭的無需登入即可訪問,而使用者只有user這個許可權,只能訪問user開頭的。
下面簡化一下配置,使用許可權註解來使用。

@RestController
@RequestMapping("user")
public class UserController {

        @GetMapping
        @PreAuthorize("hasRole('USER')")
        public String query(){
            return "i am user";
        }


}

@PreAuthorize 用於判斷使用者是否有指定許可權,沒有就不能訪問
同時配置類加上
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)註解,分別表示開啟 Security 服務、開啟全域性 Securtiy 註解,這樣操作之後效果同上。

相關文章