JFinal在Websphere下的问题
@JFinal 虽然这个问题我认为和JFinal本身关系不大,但是这个是用JFinal的时候出现的问题。也顺便反馈一下吧。
波波,最近在用WebSphere做服务器中间件,原本在Weblogic下正常的应用,到WebSphere下不正常了。体现为以下两点:
1.web.xml下配置的Base Form认证失效
2.进行render的时候,由于WebSphere下使用Filter做路径映射,而不是用Servlet,导致WebSphere认为应用没有返回页面,而会在request中添加几个attribute,其中包含com.ibm.ws.webcontainer.filter.filenotfound。在进行renderJson的时候,会出现OOM的错误。
Base Form认证如下:
<security-constraint> <display-name>everyone</display-name> <web-resource-collection> <web-resource-name>AdminPages</web-resource-name> <description>login user</description> <url-pattern>/admin/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <description>These are the roles who have access</description> <role-name>*</role-name> </auth-constraint> <user-data-constraint> <description>This is how the user data must be transmitted</description> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint>
我的解决办法是增加一个Handler。
过滤掉包含(/j_security_check) || (/admin并且未登录)的URL,交由容器去处理。去掉WebSphere增加的几个request中的attribute。代码如下:
/** * JFinal在WebSphere下,会拦截Base Form认证,导致无法登录。 使用该Handler过滤掉关于安全认证的请求 * */ public class SecurityHandler extends Handler { private String[] filterUrls; public SecurityHandler(String... securityUrls) { filterUrls = securityUrls; } @Override public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) { boolean shouldFilter = false; request.removeAttribute("com.ibm.ws.webcontainer.filter.filenotfound"); request.removeAttribute("com.ibm.websphere.servlet.uri_non_decoded"); if (target.indexOf("/j_security_check") != -1 && request.getRemoteUser() == null ) { shouldFilter = true; } else { for (String s : filterUrls) { if (target.startsWith(s) && request.getRemoteUser() == null) { shouldFilter = true; break; } } } if (shouldFilter) { for (boolean b : isHandled) { b = true; } } else { nextHandler.handle(target, request, response, isHandled); } } }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
谢谢。认证配置去不掉。那个是我们公司的统一认证。
将 web.xml 中的认证配置去掉可否? 另外 isHandled 数组的长度只可能为 1 , 所以 isHnandled[0] = true 即可,而楼主在 for 循环中对 b 这个临时对象赋值其实改变不了 isHandled 中的值。感谢楼主分享