我有使用JSP的Spring应用程序。我需要重定向一个页面,但只需要一次。这是由于春天的安全性 - 一旦用户进入这个页面,我需要调用重定向来记录他,但要保持在同一页面上。有什么办法,如何只通过java,html或js这样做?或者也许我错了 - 必须有一些方法,如何做到这一点,但我不是很喜欢前端技术,所以我很高兴,如果有人可以发布一些代码来告诉我,如何做到这一点工作..谢谢:)
所以用例:用户输入mywebsite.com/login - >在他已经登录的情况下我需要调用重定向来记录他 - >相同的网站应该出现,但现在没有重定向。
PS:我无法将用户重定向到其他网站 - 它必须是具有相同源代码的同一网站。
答案 0 :(得分:0)
如果我了解您的用例,我宁愿将用户注销为登录操作的一部分(即将登出过程分解出来,并从注销操作以及登录操作中调用它)
如果这不可行(并且我不能解释为什么它不会),我将专注于“重定向,如果他已登录”部分而不是“仅重定向一次”部分 - 前者非常假设您正在使用某种会话来跟踪登录状态,那么几乎不需要对代码进行任何修改就可以轻松检查。
免责声明:我对Sprint几乎一无所知,这些都是非常通用的评论,可以适用于任何经典的网络应用程序。
答案 1 :(得分:-1)
您可以使用过滤器。
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
HttpServletRequest test1= (HttpServletRequest) arg0;
test1.getRequestURL()); it gives http://localhost:8081/applicationName/menu/index.action
test1.getRequestURI()); it gives applicationName/menu/index.action
String pathname = test1.getServletPath()); it gives //menu/index.action
if(pathname.equals("//menu/index.action")){
arg2.doFilter(arg0, arg1); // call to urs servlet or frameowrk managed controller method
// in resposne
HttpServletResponse httpResp = (HttpServletResponse) arg1;
RequestDispatcher rd = arg0.getRequestDispatcher("another.jsp"); redirect to another page at response time
rd.forward(arg0, arg1);
}
不要忘记将<dispatcher>FORWARD</dispatcher>
放在web.xml中的过滤器映射中
如果您不想使用过滤器,可以从urs控制器方法重定向到另一个jsp。