android realm 查询 设备类型为电脑且不为台式 和 设备类型为打印机的 设备集合
时间: 2024-05-02 08:20:35 浏览: 11
您好!关于您的问题,我可以为您提供一些参考信息。在 Android Realm 中,您可以使用以下代码查询设备类型为电脑且不为台式机的设备集合:
```
RealmResults<Device> devices = realm.where(Device.class)
.equalTo("type", "computer")
.notEqualTo("subtype", "desktop")
.findAll();
```
同时,如果您需要查询设备类型为打印机的设备集合,可以使用以下代码:
```
RealmResults<Device> devices = realm.where(Device.class)
.equalTo("type", "printer")
.findAll();
```
希望这些信息可以对您有所帮助!如果您有其他问题,欢迎随时提出。
相关问题
配置 linux2 为 kdc 服务器,负责 linux3 和 linux4 的验证
好的,我可以为您提供一些基本的步骤:
1. 在 Linux2 上安装 Kerberos
您可以使用以下命令来安装 Kerberos:
```
sudo apt-get update
sudo apt-get install krb5-kdc krb5-admin-server
```
2. 配置 Kerberos
编辑 `/etc/krb5.conf` 文件并添加以下内容:
```
[logging]
default = FILE:/var/log/krb5.log
[libdefaults]
default_realm = YOUR_REALM_NAME
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
[realms]
YOUR_REALM_NAME = {
kdc = your_kdc_server_hostname
admin_server = your_kdc_server_hostname
}
[domain_realm]
.your_domain_name = YOUR_REALM_NAME
your_domain_name = YOUR_REALM_NAME
```
注意替换 `YOUR_REALM_NAME` 和 `your_kdc_server_hostname` 为您自己的值。
3. 创建 Kerberos 数据库
使用以下命令创建 Kerberos 数据库:
```
sudo krb5_newrealm
```
4. 创建 Kerberos 用户
使用以下命令创建 Kerberos 用户:
```
sudo kadmin.local -q "addprinc username"
```
注意替换 `username` 为您自己的用户名。
5. 配置 Linux3 和 Linux4
在 Linux3 和 Linux4 上安装 Kerberos,并编辑 `/etc/krb5.conf` 文件,添加以下内容:
```
[logging]
default = FILE:/var/log/krb5.log
[libdefaults]
default_realm = YOUR_REALM_NAME
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
[realms]
YOUR_REALM_NAME = {
kdc = your_kdc_server_hostname
admin_server = your_kdc_server_hostname
}
[domain_realm]
.your_domain_name = YOUR_REALM_NAME
your_domain_name = YOUR_REALM_NAME
```
注意替换 `YOUR_REALM_NAME` 和 `your_kdc_server_hostname` 为您自己的值。
6. 测试
使用以下命令测试 Kerberos 是否正常工作:
```
kinit username
```
注意替换 `username` 为您在步骤 4 中创建的用户名。
如果一切正常,您应该能够成功验证并获得 TGT(Ticket-Granting Ticket)。
这是一个基本的配置步骤,您可能需要根据您的实际情况进行一些调整。
为什么账号密码不存在了返回false的时候还是能继续访问
非常抱歉,我之前的回答有误。在Shiro中,当身份验证失败时,应该返回`null`而不是`false`,以使Shiro能够正确处理认证错误并进行相应的处理。
在自定义的Shiro Realm的`doGetAuthenticationInfo()`方法中,如果发现账号密码不存在或者验证失败,应该抛出`UnknownAccountException`或`AuthenticationException`异常,而不是返回`null`。这样Shiro就能够正确地处理异常,并执行相应的操作(例如重定向到登录页面)。
以下是修正后的示例代码:
```java
public class CustomRealm extends AuthorizingRealm {
// ...其他重写的方法...
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
if (!(token instanceof UsernamePasswordToken)) {
return null;
}
UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
String sessionId = usernamePasswordToken.getUsername();
// 从Redis中根据sessionId获取用户密码
Jedis jedis = new Jedis("redis_host", redis_port);
String password = jedis.get(sessionId);
if (password == null) {
throw new UnknownAccountException("Invalid session");
}
// 返回身份验证信息
return new SimpleAuthenticationInfo(sessionId, password, getName());
}
}
```
请确保在自定义Realm中正确抛出异常,并在Shiro配置文件中配置适当的异常处理器来处理身份验证失败的情况,例如重定向到登录页面。
同时,请确保在Shiro的配置文件中正确配置过滤器链和拦截规则,以确保只有在进行身份验证成功后才能继续访问受保护的页面。