Spring Boot + Mongo DB + Shiro配置

时间:2018-07-29 21:20:43

标签: spring mongodb apache spring-boot shiro

我正在Spring Boot和Mongo DB中开发基于Web的应用程序。现在,我想使用Apache Shiro进行身份验证和授权。有人可以向我解释该程序以及如何建立mongo db领域,以及在何处提及许可用户映射吗?谢谢。

2 个答案:

答案 0 :(得分:0)

GitHub上有一些MongoDB领域。我不想链接到他们,因为还没有尝试过,但这是您最好的起点。

答案 1 :(得分:0)

基本上您需要三个组成部分

@Component
public class YourMongoConfiguration {
    @Bean(name = "mongoTemplate")
    @DependsOn({ "lifecycleBeanPostProcessor" })
    public MongoTemplate mongoTemplate() throws Exception {
        MongoTemplate mt = new MongoTemplate(YOUR_CONFIGURATIOP_HERE);
        return mt;
    }
}

然后创建一个MongoRealm

@Component("mongoRealm")
public class MongoRealm extends AuthorizingRealm {
    private final MongoTemplate mongoTemplate;

    @Autowired
    public MongoRealm(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
        HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
        credentialsMatcher.setHashAlgorithmName(Sha512Hash.ALGORITHM_NAME);
        credentialsMatcher.setHashIterations(53);
        setCredentialsMatcher(credentialsMatcher);
    }

    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
      // YOUR IMPLEMENTATION
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) 
throws AuthenticationException {
    // YOUR IMPLEMENTATION
    }
}

最后是安全经理

@Component("securityManager")
public class SecurityManager extends DefaultWebSecurityManager {
    @Autowired
    public SecurityManager(Realm mongoRealm, SessionDAO mongoSessionDAO) {
        super(mongoRealm);
        setRealm(mongoRealm);
        SessionManager sessionManager = new SessionManager();
        setSessionManager(sessionManager);
        sessionManager.setSessionDAO(mongoSessionDAO);
    }
}

从现在开始,任何一个Shiro都会调用您的MongoRealm来验证登录名和权限,并且您将能够使用类似的类来迷惑您的收藏集

@Service
public class ONE_OF_YOUR_Services  {
    @Autowired
    private MongoTemplate mongoTemplate;

    protected List<T> getDocuments(Class<T> clazz, String collection) {
        return mongoTemplate.findAll(clazz, collection);
    }
}

希望对您有帮助。