2015-11-09 106 views
0

我想配置一些休息服務的Spring啓動和彈簧安全。 我有表用戶,特權,priviledge_user 我有這個配置文件休息與春季開機+彈簧安全與自定義用戶表

WebSecurityConfig

@EnableWebSecurity 
@Configuration 
class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().anyRequest().fullyAuthenticated().and(). 
       httpBasic().and(). 
       csrf().disable(); 
    } 

} 

和AuthenticationConfiguration

@Configuration 
public class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter { 
    @Autowired 
    UserRepository userRepository; 
    Logger log = LoggerFactory.getLogger(this.getClass()); 

    @Override 
    public void init(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(userDetailsService()); 
    } 

    @Bean 
    UserDetailsService userDetailsService() { 
     return new UserDetailsService() { 

      @Override 
      public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 

       User account = userRepository.findByUsername(username); 
       log.info("The user ({}) logged has the password {}", username, account.getPassword()); 
       org.springframework.security.core.userdetails.User userSession = new org.springframework.security.core.userdetails.User(account.getUsername(), account.getPassword(), true, true, true, true, 
         AuthorityUtils.createAuthorityList("USER")); 
       return userSession; 
      } 

     }; 
    } 
} 

調試運行的代碼似乎驗證運作良好,因爲我已經從用戶數據庫(我正在使用JNDI datasoure,並在application.properties中配置) 但是當我試圖獲得任何東西時http://localhost:8080/並設置我的憑據我無法訪問,並始終獲得憑據提示 什麼我做得不好?

+1

您是否擁有數據庫中的有效用戶?日誌記錄說什麼? – holmis83

+0

是的我有一個有效的用戶在數據庫中,我沒有錯誤日誌只有 '2015-11-09 17:07:26,069信息[org.springframework.boot.actuate.audit.listener.AuditListener] (默認任務-2)AuditEvent [timestamp = Mon Nov 09 17:07:26 BOT 2015,principal = anonymousUser,type = AUTHORIZATION_FAILURE,data = {type = org.springframework.security.access.AccessDeniedException,message = Access is denied} ] ' – poloche

回答

0

您沒有使用正確的權限實例化UserDetails對象。

而不是總是將「USER」傳遞給AuthorityUtils.createAuthorityList方法,您應該爲您正在加載的用戶傳遞一個包含privilege_user表中所有角色/特權的List。默認情況下,此角色的形式爲「ROLE_USER」,「ROLE_ADMIN」...

因此,從數據庫成功加載用戶並不意味着身份驗證過程運行良好。您仍然必須告訴他如何爲該用戶加載權限。

+0

因此,我還沒有分配數據庫中的角色,然後我認爲如果我將所有用戶設置爲相同的角色(USER),這應該允許訪問權限? 我需要配置哪些角色應該允許控制器中的某些方法? – poloche

+0

我在我的Personcontroller類中設置了 @PreAuthorize(「USER」) 但這仍然不起作用 – poloche

+0

嘗試在AuthorityUtils.createAuthorityList(「ROLE_USER」)中設置「ROLE_USER」而不是「USER」。我認爲數據庫musut中的角色具有「ROLE_」前綴,儘管您仍然可以在@PreAuthorize(「USER」)上檢查「USER」,因爲Spring安全性默認會添加前綴。另外,嘗試點擊localhost:8080而不是你的PersonController方法的url,並看看有什麼happpens。使用您的配置,這應該要求您提供憑據,但不驗證任何權限。 –