【SpringSecurity】Security實現用戶認證和授權

SpringSecurity

實現用戶認證和用戶授權,訪問合法等功能的一個安全框架。ps:shiro國內市場佔有率比這個高。

需求

springboot+security實現用戶認證和授權

編碼

第一步: 編寫Config類 注意@註解的引入

@EnableWebSecurity
public class SecurConfig extends WebSecurityConfigurerAdapter{
	
		@Override
		protected void configure(HttpSecurity http) throws Exception {
			http.authorizeRequests()
			.antMatchers("/").permitAll()
			.antMatchers("/level1/*").hasRole("VIP1")
			.antMatchers("/level2/*").hasRole("VIP2")
			.antMatchers("/level3/*").hasRole("VIP3")
			.and()
			.formLogin()
			.loginPage("/userlogin")
			.and()
			.logout()
			.and()
			.rememberMe()
			.rememberMeParameter("remember-me")
			;
		
		}
		@Override
		protected void configure(AuthenticationManagerBuilder auth) throws Exception {
			auth.userDetailsService(userDetailsService()).passwordEncoder(new BCryptPasswordEncoder());
		}
//根據用戶名查詢數據庫實現認證,SecurityUser繼承UserBean和實現UserDetails接口爲了授權。
		@Bean
		protected UserDetailsService userDetailsService() {
			
			return new UserDetailsService() {
				@Autowired
				UserRepository up;
				
				@Override
				public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
					User user = up.findByUsername(username);
					user.setPassword(new BCryptPasswordEncoder().encode(user.getPassword()));
					if(user==null)throw new UsernameNotFoundException("Username " + username + " not found");
					return new SecurityUser(user);
				}
				
			};
		}
		


}


第二步:編寫User類

public class SecurityUser extends User implements UserDetails{

	public SecurityUser(User user) {
		// TODO Auto-generated constructor stub
		this.setId(user.getId());
		this.setPassword(user.getPassword());
		this.setUsername(user.getUsername());
		this.setRole(user.getRole());
	}

	@Override
	public Collection<? extends GrantedAuthority> getAuthorities() {
		Collection<GrantedAuthority>  authorities=new ArrayList<GrantedAuthority>();
		String username = this.getUsername();
		if(StringUtils.hasText(username)) {
			SimpleGrantedAuthority authority=new SimpleGrantedAuthority(this.getRole());
			authorities.add(authority);
		}
		return authorities;
	}
	
	@Override
	public boolean isAccountNonExpired() {
		// TODO Auto-generated method stub
		return true;
	}
		
	@Override
	public boolean isAccountNonLocked() {
		// TODO Auto-generated method stub
		return true;
	}
	
	@Override
	public boolean isCredentialsNonExpired() {
		// TODO Auto-generated method stub
		return true;
	}

	@Override
	public boolean isEnabled() {
		// TODO Auto-generated method stub
		return true;
	}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章