首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jdbcRealm中使用Shiro Guice

在jdbcRealm中使用Shiro Guice
EN

Stack Overflow用户
提问于 2014-11-05 14:48:34
回答 1查看 570关注 0票数 2

我是Guice和Shiro的新手,我正在尝试将它与我的DB (h2)一起使用。我读过这样的文章:点击

但是就像他们说的那样,它只是为用户和角色部分工作,这对我来说是无用的。

我的shiro.ini正在工作,我成功地创建了用户、登录和注销,而没有Guice部分。

我的MyShiroModule

代码语言:javascript
复制
public class MyShiroModule extends ShiroModule{

protected void configureShiro() {
    try {
        bindRealm().toConstructor(IniRealm.class.getConstructor(Ini.class));
    } catch (NoSuchMethodException e) {
        addError(e);
    }
}

@Provides
Ini loadShiroIni() {
    return Ini.fromResourcePath("classpath:shiro.ini");
}
}

我的舱:

公共类模块扩展AbstractModule {

代码语言:javascript
复制
@Singleton

protected void configure() {
    Injector injector = Guice.createInjector(new MyShiroModule());
    SecurityManager securityManager = injector.getInstance(SecurityManager.class);
    SecurityUtils.setSecurityManager(securityManager);        
}
}

正如他们在教程中所说的。我需要添加什么才能使用我的shiro.ini的主要部分?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-05 19:50:23

我从未让JDBC领域使用Guice,因为正如您所提到的,它只是出于任何原因读取用户和组部分。最后,我根本没有使用Shiro.ini,只是像这样创建JdbcRealm

代码语言:javascript
复制
public class ShiroAuthModule extends ShiroModule {

  @Override
  public void configure() {
    super.configure();
    // Bind your data source however you need to - I use JNDI 
    // but it would be easy to switch to a properties file.
    bind(Context.class).to(InitialContext.class);
    bind(DataSource.class).toProvider(JndiIntegration.fromJndi(DataSource.class, "java:/comp/env/jdbc/security"));
  }

  @Provides
  @Singleton
  JdbcRealm loadJdbcRealm(Ini ini, DataSource ds, 
      @Named("shiro.authenticationQuery") String authenticationQuery,
      @Named("shiro.userRolesQuery") String roleQuery,
      @Named("shiro.permissionsQuery") String permissionQuery) {
    JdbcRealm realm = new JdbcRealm();
    realm.setAuthenticationQuery(authenticationQuery);
    realm.setUserRolesQuery(roleQuery);
    realm.setPermissionsQuery(permissionQuery);
    realm.setPermissionsLookupEnabled(true);
    realm.setDataSource(ds);
    return realm;
  }

  @Override
  protected void configureShiro() {
    // shiro.properties should be on your classpath and 
    // contain the named properties in loadJdbcRealm
    Properties properties = Module.loadProperties(this, "shiro.properties");
    Names.bindProperties(binder(), properties);
    try {
      bindRealm().to(JdbcRealm.class);
    } catch (SecurityException e) {
      addError(e);
    }
  }

} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26760036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档