2017-08-26 7 views
0

私が持つテーブルのエージェントがあります。[ID主キー、電子メールのvarchar型、パスワードはvarchar]Spring security4「アクセスが拒否されました」という問題、authoritiesByUsernameQueryが機能しません。

とagents_rolesテーブルを:[agent_role_id主キー、電子メールvarchar型は、外部キーをAGENT_ID]私は

セキュリティコントローラ私はこれを持っている:

@Configuration 

@EnableWebSecurity 

public class Security extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private DataSource dataSource; 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception 
    { 

      auth.jdbcAuthentication().dataSource(dataSource) 
          .usersByUsernameQuery("select email, password,visibility from agents where email=?") 
          .authoritiesByUsernameQuery("select email, role from agents_roles where email=?"); 
     } 

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

      http.formLogin().loginPage("/login"); 

     http.authorizeRequests().antMatchers("/admin/**").hasRole("ADMIN"); 

      http.authorizeRequests().antMatchers("/agent/**").hasRole("DEV"); 

      http.exceptionHandling().accessDeniedPage("/403"); 

    } 

} 

私はホームページのアクセス拒否されたページを取得し、「403.html」を取得しよう

私は2番目のクエリ "authoritiesByUsernameQuery"が正しく動作しないと思いますが、私はその理由を知らないのですか?

私はusersのテーブルとusers_roleで他の例を試してみましたが、うまくいきますが、違いはユーザ名がプライマリキーです!!

お願いします。ありがとうございます。

答えて

0

問題が見つかりました。私のクエリでここ

私はこれを使用し、それがうまく働いた:

.... 
usersByUsernameQuery("select a.email as username, a.password, a.visibility from agents a where a.email=?") 
          .authoritiesByUsernameQuery("select ar.email as username, ar.role from agents_roles ar, agents a where a.id = ar.agent_id and ar.email=?"); 
.... 
関連する問題