2017-11-07 8 views
1

My Springアプリケーションは、ログインページに対して、両方のユーザとロールとクロステーブルを持つデータベースを使用します。 Spring isUserInRoleはMySQL DBのロールでは動作しません

は、しかし、私は、ユーザーが「admin」でそれを試してみて、私は /user

印刷アウトrequest.getUserPrincipal().toString()へのリダイレクトを取得し、私はコントローラ

@Controller 
public class StartController { 
    @RequestMapping("/default") 
    public String defaultAfterLogin(HttpServletRequest request) { 
     if (request.isUserInRole("ADMIN")) { 
      return "redirect:/admin/"; 
     } 
     return "redirect:/user/"; 
    } 
} 

に使用するさまざまな役割のページにユーザーをリダイレクトするには:

Principal: [email protected]: 
Username: [email protected]; 
Password: [PROTECTED]; 
Enabled: true; 
AccountNonExpired: true; 
credentialsNonExpired: true; 
AccountNonLocked: true; 
Granted Authorities: ADMIN; 
Credentials: [PROTECTED]; 
Authenticated: true; 
Details: org.sprin[email protected]b364: 
RemoteIpAddress: 0:0:0:0:0:0:0:1; 
SessionId: null; 
Granted Authorities: ADMIN 

/adminへのリダイレクトの問題は何ですか?

答えて

0

たぶんあなたの代わりにこれを試すことができます:

boolean hasAuthorityAdmin = false; 

hasAuthorityAdmin = SecurityContextHolder.getContext().getAuthentication().getAuthorities().contains(AuthoritiesConstants.ADMIN); 
if (hasAuthorityAdmin) { 
    return "redirect:/admin/"; 
} 
return "redirect:/user/"; 
0

はたぶん、あなたはloadUserAuthoritiesカスタムを使用している....とあなたがで春3 ..........から春4への移行この理由から、loadUserAuthoritiesからデータベースのリストに接頭辞ROLE_を追加する必要があります。 request.isUserInRole( "ADMIN")はROLE_ADMINに変換してリストと比較します

関連する問題