[size=medium][color=darkblue]小弟先描述下问题:只能让用户在地址栏中输入http://localhost:8080/install.jsp进行操作,不能输入http://localhost:8080/install.action访问。也就是只允许*.jsp的也没访问,不允许*.action的访问。
小弟苦思冥想了2天,头发都掉了好几十根了。忘各位高手给与提示,或代码。万分感谢![/color][/size]
[b]问题补充:[/b]
不能直接访问intall.action,但可以从intall.jsp中点击一个连接或按钮访问到intall.action。
小弟想用struts2拦截器实现,因为最近在学习s2。
[b]问题补充:[/b]
您好!
小弟想做一个论坛的安装程序,像discuz那样的安装。从“用户协议”到“数据库配置”都是jsp页面,想让用户按照步骤来进行安装,而不是直接在地址栏中输入intall.action进行安装。这几天我用了session进行控制,可以基本实现。总感觉不太满意,渴望大哥能分享更好的方法。谢谢!
在install.jsp隐藏一个字段,跳到intall.action时,如果有这个字段的值,就合法;没这个字段的值,就非法。
也许你可以考虑下用UrlRewriter做伪静态化,更优雅
http://yongtree.iteye.com/blog/263970
写个过滤器Filter
[code="java"]
public class TestFilter implements Filter{
/* (non-Javadoc)
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
System.out.println(req.getRequestURL());
System.out.println();
if (req.getRequestURI().endsWith(".action")){
chain.doFilter(request, response);
return;
}
.....
.....
chain.doFilter(req, res);
}
/* (non-Javadoc)
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
[/code]
记得配置web.xml
拦截器里面也可以获取request啊!
struts.action.extension=jsp这样就只能.jsp访问了
如果Struts2的URL后缀是.action,那么.jsp后缀的URL Struts2是无法搞定的,所以LZ想用拦截器搞定.jsp的逻辑是没办法搞定的。
LZ可以说出自己这样做要解决什么问题,也许LZ的方向从根本上就错了,倒不如把原始的问题跑出来,大家看如何解决