2012-03-26 4 views
0

私は、JCRリポジトリに接続する前に、ログイン時に認証がすでに行われているSpringアプリケーションにModeshapeを組み込もうとしています。 は、これはその中で私がModeshape AuthenticationProviderの設定

session = repository.login(); 

を使用して参照を取得することができ、働いているしかし、これは私は、ワークスペース・レベルのアクセス制御(ドキュメントのセクション6.5)のためにするカスタムauthenticationProviderを迂回するように表示されます。ここ は私の設定です:

<configuration xmlns:...> 

<mode:repositories> 
    <mode:repository jcr:name="my_repo" mode:source="my_source"> 

     <mode:authenticationProviders> 
      <mode:authenticationProvider 
         jcr:name="customAuthProvider" 
       mode:classname="com.myapp.CustomSecurityContext" /> 
     </mode:authenticationProviders> 

    </mode:repository> 
</mode:repositories> 

<mode:sources jcr:primaryType="nt:unstructured"> 
    <mode:source jcr:name="my_source" .... 
    </mode:sources> 
</configuration> 

CustomSecurityContextが(そこに春の注釈があるが、(POJO)コンストラクタが呼ばれることは決してありません任意のアイデア間違っている可能性が何

@Configurable (preConstruction = true) 
public class CustomSecurityContext implements SecurityContext, AuthorizationProvider { 

    @Autowired 
    private ServletCredentials servletCredentials; 

    @Autowired 
    CustomUserDetailsManager userDetailsManager; 

    @Autowired 
    WorkspaceRole workspaceRole; 

    private static final Logger log = LogUtil.getLogger(); 

    public CustomSecurityContext() { 
     System.out.println(" ******** THIS NEVER GETS CALLED ********"); 
    } 

    @Override 
    public String getUserName() { 
     HttpServletRequest request = servletCredentials.getRequest(); 

     if (request != null) { 
      return request.getUserPrincipal().getName(); 
     } 

     log.warn("HttpServletRequest is null, defaulting to getUserName() = null"); 
     return null; 
    } 

    @Override 
    public boolean hasRole(String roleName) { 

     int idUser = userDetailsManager.getIdUser(); 

     if (idUser == userDetailsManager.getSystemUserID()) { 
      // The system itself can work with all workspaces 
      return true; 
     } 

     if (roleName == null) { 
      log.warn("roleName is null when calling hasRole, returning false"); 
      return false; 
     } 

     return workspaceRole.hasRole(idUser, roleName); 
    } 

    @Override 
    public void logout() { 
     log.debug("Calling logout"); // Not applicable as the session credentials are managed by Spring. 

    } 

    @Override 
    public boolean hasPermission(ExecutionContext context, String repositoryName, String repositorySourceName, String workspaceName, Path path, String... actions) { 

     log.info("Checking hasPermission for repository '" + repositoryName + "', workspace '" + workspaceName + ", path: '" + path); 

     if (actions != null) { 
      for (String action : actions) { 
       log.info("Action : " + action); 
      } 
     } 
     return true; // TODO:... 
    } 
} 

答えて

1

私はあなたに走ったインスタンス化されることはありません。?構成(または、少なくとも<mode:authenticationProviders>フラグメントのテストケースのこの設定)、コード(バージョン2.8.0.Final)をデバッグして、ModeShapeがクラスのインスタンスを作成しようとしていることを確認してください。すべてのThrowablesをキャッチしようとすると)、ModeShapeはエラーメッセージを書き込みますログに:

Unable to initialize authentication provider "com.myapp.CustomSecurityContext" for repository "my_repo": <whatever the reason is> 

これは表示されませんか?そうでない場合は、ログが正しく書き込まれていることを確認してください。また、ディスカッションフォーラムでお気軽にお問い合わせください。

+0

このメッセージは一切表示されません。スレッドを続行するには、modeshapeのやりかたにスイングしてください... – user1016765

関連する問題