2017-09-28 20 views
0

コントローラクラス:ブラウザの戻るボタンが押されている場合、Spring MVCでログインに成功した後にログインフォームに戻るのを防ぐにはどうすればいいですか?

package com.ym.controller; 

import javax.servlet.http.HttpSession; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
public class CustomerController { 

@RequestMapping(value="/home") 
public String goHome(){ 
    return "home"; 
} 

@RequestMapping(value="/first") 
public String first(HttpSession session){ 
    if(session.getAttribute("visited") != null){ 
     return "home"; 
    } 
    else{ 
     return "form"; 
    } 
} 

@RequestMapping(value="/second", method=RequestMethod.POST) 
public String second(HttpSession session){ 
    session.setAttribute("visited", true); 
    return "home"; 
} 
} 

form.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <style type="text/css">@import url("<c:url value="/css/main.css"/>"); 
</style> 

    <title>Login Form</title> 
</head> 

<body> 
<form:form action="second" method="post"> 

    <p> 
     <input id="reset" type="reset" tabindex="4"> 
     <input id="submit" type="submit" tabindex="5"> 
    </p> 
</form:form> 

</body> 
</html> 

home.jspを

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Home</title> 
</head> 
<body> 
    <a href="<c:url value="/first"/>">Go to form page</a> 
</body> 
</html> 

web.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

    <servlet> 
    <servlet-name>springmvc</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/config/springmvc-config.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup>  
</servlet> 

<servlet-mapping> 
    <servlet-name>springmvc</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 


</web-app> 

springmvc-config.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd  
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd"> 

<context:component-scan base-package="com.ym.controller"/> 
<context:component-scan base-package="com.ym.service"/> 

<mvc:annotation-driven/> 
<mvc:resources mapping="/css/**" location="/css/"/> 


<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/jsp/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

</beans> 

したがって、最初は「/ home」に行きます。 home.jspには、セッションの「visited」属性をチェックする「/ first」リクエスト処理メソッドへのリンクがあります。nullでない場合、form.jspが返されます。ここでは、「visited "セッションの属性をtrueに、それ以外の場合はhome.jspに戻ります。 セッション属性「visited」がtrueに設定された後でも、ブラウザの戻るボタンをクリックしてform.jspに戻ることができますが、URLバーに入力するとhttp://localhost:9001/ExperimentProject1/firstとなります実際に "visited"属性がtrueに設定されているため、home.jspにリダイレクトされました。誰かが私にここで何が起こっているのか説明できますか?バックボタンをクリックすると、手動でURIを入力すると、別の効果があるのはなぜですか? これは単にログインメカニズムの類推です。

+0

通常の '

' POSTではなく、ajaxでログインページを変更し、現在のページを意図したターゲットページに置き換えます。 – Andreas

答えて

0

"home"ではなく "redirect:home"を使用します。これはおそらく最もよく知られたアプローチです。

+0

私は試しましたが動作しません。私がhome.jspから戻るボタンを押すと、私はまだform.jspに着陸します。 first()メソッドとsecond()メソッドの両方で – maxime

+0

? –

+0

はい両方 – maxime

関連する問題