我正在尝试在Tomcat 7.0.32中嵌入Realms,如下所示(以伪XML形式编写):
<CombinedRealm>
<LockoutRealm>
<DataSourceRealm/>
</LockoutRealm>
<UserDatabaseRealm/>
</CombinedRealm>
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用 - 是否可以将Tomms中的Realms嵌套两个以上级别?我在日志中收到警告:
No rules found matching 'Server/Service/Engine/Realm/Realm/Realm'.
Run Code Online (Sandbox Code Playgroud)
其背后的想法是,Web服务有一些不能被锁定的关键用户(例如,作为DOS)和一些普通用户,这些用户可能拥有较弱的密码,其中lockoutRealm应该是活动的.我相信其他人一直处于这种状况.
如果还有其他方法可以实现这一点(例如LockoutRealm的白名单),请告诉我.
单点登录也是必需的.
我想扩展现有的LockoutRealm代码与一个永远不会锁定的帐户列表将是一个选项,但我不是那么热衷于编写我自己的Realm,我宁愿不在该级别上添加自定义代码到Tomcat,因为这将复杂的设置为其他人和每个Tomcat更新它可能会破坏等.
谢谢你的帮助!
这是我的测试配置的server.xml的相关部分:
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.CombinedRealm">
<!-- Lockout realm for the DB users -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- PRIMARY: DataSourceRealm with user DB -->
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/authority"
userTable="user" userNameCol="username"
userCredCol="password" digest="SHA"
userRoleTable="user_role" roleNameCol="rolename" />
</Realm>
<!-- FALLBACK:
This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase …
Run Code Online (Sandbox Code Playgroud) 我已经更新了这个问题,因为在最初的问题中,我追逐的问题竟然是一个完全不同的错误(在这种情况下并不感兴趣).但是我在测试中遇到的二阶错误是其他人可能遇到的问题并且产生了一个非常有趣的答案的答案,所以我将这里作为一个问题留在这里.
我试图通过正则表达式追踪一个问题,因为前导零点似乎不匹配.我发现以下所有正则表达式在我的命令行测试中都不匹配:
"005630" =~ /^0056(10|11|15|20|21|25|30|31)$/
"005630" =~ /0056(10|11|15|20|21|25|30|31)/
"005630" =~ /56(10|11|15|20|21|25|30|31)/
"005630" =~ /..56(10|11|15|20|21|25|30|31)/
"005630" =~ /..5630/
"005630" =~ /005630/
"005630" =~ /^005630$/
"005630" =~ /5630/
"005630" =~ /(0)*5630/
"005630" =~ /5630/g
"005630" =~ m/5630/g
Run Code Online (Sandbox Code Playgroud)
这确实匹配:
"x005630" =~ /0056(10|11|15|20|21|25|30|31)/
Run Code Online (Sandbox Code Playgroud)
与其他人类似,即一旦我添加了一封主要信件,它就有效.
测试代码是(在Cygwin bash上使用Cygwin Perl v5.10.1进行测试):
perl -e "print ( "005630" =~ /0056(10|11|15|20|21|25|30|31)/)" # does not display a true value
perl -e "print ( "x005630" =~ /0056(10|11|15|20|21|25|30|31)/)" # displays a true value
Run Code Online (Sandbox Code Playgroud)
这里的引用显然是一个错误(不能"
在引用的字符串中使用未转义"
).但我仍然不明白为什么尽管报价不正确,第二行仍然有效.
注意:这也可能在没有正则表达式的其他情况下发生.