2015-02-12 2 views
0

, когда я настроил spring by xml, все wokred fine. Теперь я пытаюсь выполнить настройку с помощью классов Java. У меня есть объект User И роль лица В стеке ошибки вы можете видеть, что безопасность берет данные от пользователей таблицы вместо пользователя и Роли из атрибутов таблицы, а не мою таблицу ролей.auth Spring security java configuration

Это моя конфигурация класса безопасности

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private DataSource dataSource; 

    @Resource(name = "userDetailsServiceImpl") 
    private UserDetailsService customUserDetailsService; 


    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.jdbcAuthentication() 
       .dataSource(dataSource).and() 
       .userDetailsService(userDetailsService()) 
       .passwordEncoder(new Md5PasswordEncoder()); 

    } 

    @Override 
    public void configure(WebSecurity web) throws Exception { 
     web.ignoring().antMatchers("/resources/**"); 
    } 

    @Override 
     protected void configure(HttpSecurity http) throws Exception { 
      http.userDetailsService(customUserDetailsService) 
        .csrf().disable() 
        .authorizeRequests() 
        .antMatchers("/").permitAll() 
        .antMatchers("/control/**").hasRole("ADMIN") 
        .antMatchers("/acount/**").authenticated() 
        .antMatchers("/reviews/create").authenticated() 
        .and() 
        .formLogin() 
        .loginPage("/login") 
        .loginProcessingUrl("/login") 
        .defaultSuccessUrl("/") 
        .failureUrl("/login?err=1") 
        .usernameParameter("username") 
        .passwordParameter("password") 
        .and() 
        .logout() 
        .logoutSuccessUrl("/") 
        .deleteCookies("JSESSIONID") 
        .invalidateHttpSession(true); 
     } 

    } 

Мои UserDetailsServiceImpl

@Service("userDetailsServiceImpl") 
public class UserDetailsServiceImpl implements UserDetailsService { 

    @Autowired 
    private UserService userService; 

    @Override 
    @Transactional(readOnly = true) 
    public UserDetails loadUserByUsername(String username) 
      throws UsernameNotFoundException { 


     User user = userService.findUserByName(username); //our own User model class 
     if(user!=null){ 
      String password = user.getPassword(); 


      //Let's populate user roles 
      Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
      for(Role role : user.getRoles()){ 
       authorities.add(new GrantedAuthorityImpl(role.getRoleName())); 
      } 

      //Now let's create Spring Security User object 
      org.springframework.security.core.userdetails.User securityUser = null; 

      return new org.springframework.security.core.userdetails.User(
        user.getUsername(), 
        user.getPassword(), 
        true, 
        true, 
        true, 
        true, 
        authorities 
      ); 
     }else{ 
      throw new UsernameNotFoundException("User Not Found!!!"); 
     } 
    } 

} 

Теперь, когда я пытаюсь войти в по форме, я вижу ошибки в консоли

09:29:09,095 ERROR UsernamePasswordAuthenticationFilter:218 - An internal error occurred while trying to authenticate the user. 
org.springframework.security.authentication.InternalAuthenticationServiceException: PreparedStatementCallback; bad SQL grammar [select username,password,enabled from users where username = ?]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'askme.users' doesn't exist 
    at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:110) 
    at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:132) 
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156) 
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:177) 
    at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:94) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:211) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:57) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:534) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select username,password,enabled from users where username = ?]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'askme.users' doesn't exist 
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231) 
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:658) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:693) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:725) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:735) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:785) 
    at org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl.loadUsersByUsername(JdbcDaoImpl.java:192) 
    at org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl.loadUserByUsername(JdbcDaoImpl.java:151) 
    at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:102) 
    ... 39 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'askme.users' doesn't exist 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.Util.getInstance(Util.java:386) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2324) 
    at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:701) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:642) 
    ... 46 more 

ответ

2
Table 'askme.users' doesn't exist 

Проверено ли вы унижать? Как вы его заполняете?

+0

Да, я проверяю. В аннотациях моих сущностей я ничего не менял. Когда я устанавливаю auth.inMemoryAuthentication() .withUser ("test"). Password ("testtest"). Role ("Admin"); и попробуйте логин, все хорошие и все объекты, загружающие все данные сопоставления – BabyGluk

+0

Итак, вы сообщаете нам, что _InMemoryAuthentication_ работает, но он не работает, когда вы пытаетесь использовать вашу базу данных для аутентификации? Можете ли вы поделиться своими сущностями? – lgd

+0

https://github.com/odahovskiy/askme/tree/configureAppByAnnotation/src/main/java/com/askme/entity – BabyGluk

Смежные вопросы