2017-05-25 58 views
1

我試圖用編程方式使用Spring Security添加一個新用戶,使用this answer。但不幸的是我得到的問題。 代碼:保存新用戶不在表中用戶

SecurityConfig:

private JdbcUserDetailsManager employeeDetailsManager; 

@Bean(name = "employeeDetailsManager") 
public JdbcUserDetailsManager getEmployeeDetailsManager() { 
    return employeeDetailsManager; 
} 

應用:

private static void createUser(ApplicationContext context){ 
     List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
     authorities.add(new SimpleGrantedAuthority("supervisor")); 

     PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); 

     UserDetails user = new User("supervisor1", passwordEncoder.encode("supervisor1"), authorities); 

     JdbcUserDetailsManager userDetailsManager = (JdbcUserDetailsManager) context.getBean("employeeDetailsManager"); 
     userDetailsManager.createUser(user);//Exception! 

     Authentication authentication = new UsernamePasswordAuthenticationToken(user, null, authorities); 

     SecurityContextHolder.getContext().setAuthentication(authentication); 
    } 

上線userDetailsManager.createUser(user)我得到異常:

java.sql.SQLSyntaxErrorException:用戶缺少特權或對象不是 找到:用戶

我明白我爲什麼得到它:我真的沒有表Users。取而代之的是我有表Employees,所以我需要在這張表中保存新用戶。

那麼如何解決這個錯誤,並創建並保存用戶到表Employees

回答

0

有一些字段不斷存儲查詢。

例如,你必須

setCreateUserSql(String createUserSql) 

使用的createUser方法之前。

http://docs.spring.io/spring-security/site/docs/4.0.2.RELEASE/apidocs/org/springframework/security/provisioning/JdbcUserDetailsManager.html

請參閱不變,並確保您填寫正確。

+0

感謝您的回答!但是我仍然有一些問題:如果我使用'serDetailsManager.setCreateUserSql(「insert into employee ... .',然後我得到'user缺少特權或找不到對象:EMPLOYEE'。之後我記得我使用了'@Table因爲我嘗試使用'setCreateUserSql(「insert into \」employee \「。。。',但是這也失敗了:'user缺少權限或對象未找到:AUTHORITIES'。我現在應該修復什麼? –

+0

對於用戶缺乏特權或對象未找到錯誤,我猜最相關的一個是程序找不到表或列的說明,例如用戶,僱員,權威。可以谷歌它很容易找到anwser。 – PSo