プロジェクトが開始され、ログインに成功した後にのみ表示され、デバッグするとページが表示され、SecurityFilter が実行されていないことがわかり、UserRealm doGetAuthorizationInfo() メソッドが実行されません。問題はどこだ?ありがたい!.
これが実行された理由を理解するのを手伝ってくれる人はいますか?
それは私のクラスです:
public class UserRealm extends AuthorizingRealm {
@Resource
private UserService userService;
/**
* @param principalCollection
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
String username=principalCollection.getPrimaryPrincipal().toString();
SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();
Set<String> roleName=userService.findRoles(username);
Set<String> permissions=userService.findPermissions(username);
info.setRoles(roleName);
info.setStringPermissions(permissions);
return info;
}
/**
* @param token
* @return
* @throws AuthenticationException
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username=token.getPrincipal().toString();
User user=userService.findUserByUsername(username);
if(user!=null){
AuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(),user.getUsername()) ;
return authenticationInfo;
}else {
return null;
}
}
}
フィルター:
public class SecurityFilter extends AccessControlFilter {
@Override
protected boolean isAccessAllowed(ServletRequest request,
ServletResponse response, Object mappedValue) throws Exception {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String url = httpServletRequest.getRequestURI();
if (null != token || isLoginRequest(request, response)) {
return false;
}
return true;
}
@Override
protected boolean onAccessDenied(ServletRequest request,
ServletResponse response) throws Exception {
saveRequestAndRedirectToLogin(request, response);
return false ;
}
}
レルム:
public class UserRealm extends AuthorizingRealm {
@リソース
プライベート UserService userService;
/** *
@paramプリンシパルコレクション
- @戻る */
@オーバーライド
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection プリンシパルコレクション) {
文字列 username=principalCollection.getPrimaryPrincipal().toString();
SimpleAuthorizationInfo info=新しい SimpleAuthorizationInfo();
roleName=userService.findRoles(ユーザー名); を設定します。
権限を設定=userService.findPermissions(ユーザー名);
info.setRoles(役割名);
info.setStringPermissions(権限);
情報を返します。
}
/** *
@param トークン
- @戻る
@throws AuthenticationException
*/
@オーバーライド
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken トークン) は AuthenticationException をスローします {
文字列 username=token.getPrincipal().toString();
ユーザー user=userService.findUserByUsername(ユーザー名);
if(user!=null){
AuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(),user.getUsername()) ;
認証情報を返します。}そうしないと {
null を返します。
}
}
}