第一種方式:
第二種方式:
第三種方式:該方式是最實用的,畢竟用戶名和密碼是得查看數據庫才能判斷的,而不是預先設置好的。
1.創建一個配置類
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder()); } @Bean public BCryptPasswordEncoder bCryptPasswordEncoder(){ return new BCryptPasswordEncoder(); } }
由於要使用UserDetailsService的實現類 來 自定義 我們自己的用戶名和密碼,因此需要調用AuthenticationManagerBuilder的userDetailsService()
2.創建UserDetailsService的實現類並實現loadUserByUsername方法,loadUserByUsername的參數就是表單傳過來的用戶名
@Service public class MyUserDatailService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("role","ROLE_r1"); return new User("lucy", new BCryptPasswordEncoder().encode("123"),auths); } }
上面返回的User對象是springsecurity提供的,他已經實現了UserDetails接口,用來封裝用戶名密碼等的,等我們自定義自己的密碼和用戶名后,就可以設置到里面;
也特別說一下,AuthorityUtils.commaSeparatedStringToAuthorityList()這個方法是用來創建權限 和 角色的,比如說上面就創建了role權限和 r1角色,可以把他賦予給某個用戶,這樣用戶就具有某種權限和角色了。上面的權限和角色是可以隨便指定的,沒有固定的