springboot 使用數據庫用戶權限登錄


1、加入spring security的支持包,

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

2、主要實現兩個接口,一個是UserDetails 用戶詳細信息,一個是UserDetailsService用戶信息服務

public class AuthorityUser implements UserDetails {
    private NewUser user;

    public AuthorityUser(NewUser newUser) {
        this.user = newUser;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        List<NewAuthority> newAuthorities = user.getNewAuthorities();
        if(user == null || newAuthorities.size() <1){
            return AuthorityUtils.commaSeparatedStringToAuthorityList("");
        }
        StringBuilder commaBuilder = new StringBuilder();
        for(NewAuthority authority : newAuthorities){
            commaBuilder.append(authority.getName()).append(",");
        }
        String authorities = commaBuilder.substring(0,commaBuilder.length()-1);
        return AuthorityUtils.commaSeparatedStringToAuthorityList(authorities);

    }
    @Override
    public String getPassword() {
        return user.getPassword();
    }
    @Override
    public String getUsername() {
        return user.getUsername();
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return user.getEnable().equals(1)?true:false;
    }
}

  

 

public class SpringDataUserDetailsService implements UserDetailsService {
@Autowired
NewUserMapper newUserMapper;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
NewUser user = newUserMapper.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("username:" + username + " not found");
}
return new AuthorityUser(user);
}
}

  

3、在繼承WebSecurityConfigurerAdapter 子類中添加資源攔截規則和 用戶權限規則

@EnableWebSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //自定義權限規則
        http.authorizeRequests().antMatchers("/").permitAll()
                .antMatchers("/level1/**").hasAuthority("VIP1")
                .antMatchers("/level2/**").hasAuthority("VIP2")
                .antMatchers("/level3/**").hasAuthority("VIP3");

        //開啟自動配置的登陸功能
        http.formLogin().usernameParameter("user").passwordParameter("pwd").loginPage("/userlogin");
        //開啟自動配置注銷
        http.logout().logoutSuccessUrl("/");//注銷成功來到首頁

        http.rememberMe().rememberMeParameter("remenber");//開啟記住我功能
    }
    //定義認證規則
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    //設置自定義UserDetailService,用以從數據庫加載用戶信息 auth.userDetailsService(springDataUserDetailsService()) //設置密碼加密 .passwordEncoder(new MyPasswordEncoder()); } @Bean public SpringDataUserDetailsService springDataUserDetailsService() { return new SpringDataUserDetailsService(); }

  

 
        




免責聲明!

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



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