Spring 引导 + Mongo DB + Shiro 配置
Spring Boot + Mongo DB + Shiro configuration
我正在 Spring 引导和 Mongo 数据库中开发基于 Web 的应用程序。现在我想使用 Apache Shiro 进行身份验证和授权。有人可以向我解释程序以及如何建立 mongo 数据库领域以及在哪里提及权限-用户映射吗?谢谢。
GitHub 上有几个 MongoDB 领域。我不想 link 给他们,因为还没有尝试过,但那将是你最好的起点。
基本上你需要三个组件
@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 来验证登录和权限,您将能够像
一样使用 类 来处理您的 collection
@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);
}
}
希望对您有所帮助。
我正在 Spring 引导和 Mongo 数据库中开发基于 Web 的应用程序。现在我想使用 Apache Shiro 进行身份验证和授权。有人可以向我解释程序以及如何建立 mongo 数据库领域以及在哪里提及权限-用户映射吗?谢谢。
GitHub 上有几个 MongoDB 领域。我不想 link 给他们,因为还没有尝试过,但那将是你最好的起点。
基本上你需要三个组件
@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 来验证登录和权限,您将能够像
一样使用 类 来处理您的 collection@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);
}
}
希望对您有所帮助。