2016-03-29 25 views
7

私は春のセキュリティを使用するので、私の場合は2つのタイプのユーザーが1つのADMIN、単純なユーザーが私はデータソースからデータを取得し、私はクエリを実行する私はAthenticationSuccessHandlerに使用することを心がけていますが、動作しません。これは私のコードです。AuthenticationSuccessHandler春のセキュリティ

私の春のセキュリティクラスの設定:

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; 
import org.springframework.security.config.annotation.web.builders.HttpSecurity; 
import org.springframework.security.config.annotation.web.builders.WebSecurity; 
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 
import org.springframework.security.web.authentication.AuthenticationSuccessHandler; 
import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; 

import javax.sql.DataSource ; 

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 


@Autowired 
Securityhandler successHandler ; 


//Pour l'authentification des Utilisateur de Table Utilisateur 
@Autowired 
public void GlobalConfig(AuthenticationManagerBuilder auth,DataSource dataSource) throws Exception { 
auth.jdbcAuthentication() 
    .dataSource(dataSource) 
    .usersByUsernameQuery("SELECT \"Pseudo\" AS principal , \"Password\" AS credentials , true FROM \"UTILISATEUR\" WHERE \"Pseudo\" = ? ") 
      .authoritiesByUsernameQuery("SELECT u.\"Pseudo\" AS principal , r.role as role FROM \"UTILISATEUR\" u ,\"Role\" r where u.id_role=r.id_role AND \"Pseudo\" = ? ") 
       .rolePrefix("_ROLE"); 
} 
    //ne pas appliqué la securité sur les ressources 
@Override 
public void configure(WebSecurity web) throws Exception { 
    web.ignoring() 
    .antMatchers("/bootstrap/**","/css/**"); 

} 
@Override 
protected void configure(HttpSecurity http) throws Exception { 
http 

    .csrf().disable() 
    .authorizeRequests() 

    .anyRequest() 
     .authenticated()   
      .and() 
      .formLogin() 
      .loginPage("/login") 
      .permitAll() 
      .successHandler(successHandler) 

} 

} 

と、これは私のAuthenticationSuccessHandler

import java.io.IOException; 
import java.util.Set; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.security.core.Authentication; 
import org.springframework.security.core.authority.AuthorityUtils; 
import org.springframework.security.web.authentication.AuthenticationSuccessHandler; 

public class Securityhandler implements AuthenticationSuccessHandler { 

public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException { 
    Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities()); 
    if (roles.contains("ROLE_Admin")) { 
     response.sendRedirect("/admin/home.html"); 
    } 
} 
} 

であり、これは、コンソールでのエラーです:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Injection of autowired dependencies failed; 
+0

そして、 'SecurityHandler'のインスタンスを作成すると予想されるものは何ですか? '@ Component'も' @ Bean'としても宣言されていません。だからインスタンス上に存在します。 –

+0

私に説明することができます私は本当に春のセキュリティの初心者です –

+0

それは基本的な春の使用法です春のセキュリティとは何の関係もありません...あなたはインスタンスを他のインスタンスをautowireすることはできませんどのオブジェクトをスプリングする必要があります。 –

答えて

6
import java.io.IOException; 
import java.util.Set; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.security.core.Authentication; 
import org.springframework.security.core.authority.AuthorityUtils; 
import org.springframework.security.web.authentication.AuthenticationSuccessHandler; 
import org.springframework.stereotype.Component; 

@Component 
public class Securityhandler implements AuthenticationSuccessHandler { 

public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException { 
Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities()); 
if (roles.contains("ROLE_ADMIN")) { 
    response.sendRedirect("admin/home.html"); 
} 
} 
} 

あなたは」 vあなたのsuccessHandlerクラスで@compomentが見つかりません

関連する問題