在 Tomcat 上拦截 j_security_check 以在 Struts 2 中将用户名修改为 LDAP
Posted
技术标签:
【中文标题】在 Tomcat 上拦截 j_security_check 以在 Struts 2 中将用户名修改为 LDAP【英文标题】:Intercepting j_security_check on Tomcat to modify username for passion to LDAP in Struts 2 【发布时间】:2021-09-11 17:16:53 【问题描述】:我需要修改登录表单上的用户名,然后才能将其传递到 LDAP 进行身份验证。
应用程序是基于struts的。在将 j_username
传递给 LDAP 之前,我需要删除一些字符。最好的方法是什么,javascript 或在 Struts 中编写过滤器或拦截器?我们可以在发送到j_security_check
之前发出登录请求来过滤吗?
以下是详细信息:
login.jsp
:
<form name="loginForm" method="POST" action='<%= response.encodeURL("j_security_check") %>'>
<table>
<tr><td>User Name</td><td><input type="text" name="j_username" size="10" maxlength="30"></td></tr>
<tr><td>Password</td><td><input type="password" name="j_password" size="10" maxlength="30"></td></tr>
<tr><td> </td><td><input type="submit" value="Login" name="j_security_check"></td></td></tr>
</table>
</form>
web.xml
:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Form-Based Authentication Area</realm-name>
<form-login-config>
<!-- form-login-page>/login.jsp</form-login-page -->
<form-login-page>/WEB-INF/login.jsp</form-login-page>
<form-error-page>/WEB-INF/login.jsp?result=false</form-error-page>
</form-login-config>
</login-config>
context.xml
:
<Realm className="org.apache.catalina.realm.JNDIRealm"
allRolesMode="authOnly"
connectionURL="ldap://localhost:9002"
connectionName="CN..."
connectionPassword=""
userPattern="--"/>
【问题讨论】:
【参考方案1】:表单操作j_security_check
在调用任何过滤器之前由服务器处理。所以你不能在 Struts 2 中拦截它。
如果需要修改一些随请求传递的参数,可以将表单动作设置为Struts动作。一旦调用了 Struts 操作,您将获得 ActionContext
中的所有参数。您可以编写自定义拦截器并将其添加到操作配置中。
拦截器可以返回结果以重定向到j_security_check
,并带有您已经修改的参数。
【讨论】:
以上是关于在 Tomcat 上拦截 j_security_check 以在 Struts 2 中将用户名修改为 LDAP的主要内容,如果未能解决你的问题,请参考以下文章
如何在Spring Boot属性中设置Tomcat的SlowQueryReport拦截器的阈值