2017-07-26 6 views
-1

カスタムログインページを使用して春のセキュリティのサンプルサンプルを実行しようとしています。アプリケーションはエラーをスローしません。home.jspから、カスタムログインページにナビゲートします正しいユーザーIDとパスワードを入力すると、エラーを表示せずにhello.jspの代わりにhome.jspに戻ります。エラーを特定するためにヘルプをリクエストしてください。春のセキュリティのカスタムログインページで妥当性検査が行われない

Hello.jspの

<%@ taglib prefix="c" uri="/WEB-INF/tld/c.tld" %> 
<html> 
<body> 
    <h3>message : ${message}</h3> 
    <h3>User name : ${username}</h3> 
    <a href = "<c:url value="/j_spring_security_logout" />">LogOut</a> 
</body> 
</html> 

home.jspを

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!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>Insert title here</title> 
</head> 
<body> 
    <h3>Welcome to spring security</h3> 
    <a href="welcome"><b>Click here to logon</b></a> 
</body> 
</html> 

login.jspを

<%@ taglib prefix="c" uri="/WEB-INF/tld/c.tld"%> 
<html> 
<head> 
<title>Login Page</title> 
<style> 
.errorblock { 
    color: #ff0000; 
    background-color: #ffEEEE; 
    border: 3px solid #ff0000; 
    padding: 8px; 
    margin: 16px; 
} 
</style> 
</head> 
<body onload='document.f.j_username.focus();'> 
    <h3>Login with Username and Password (Custom Page)</h3> 

    <c:if test="${SPRING_SECURITY_LAST_EXCEPTION !=null}"><!-- ${not empty error} --> 
     <div class="errorblock"> 
      Your login attempt was not successful, try again.<br /> Caused : 
      ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message} 
     </div> 
    </c:if> 

    <form name='f' action="<c:url value='j_spring_security_check' />" 
     method='GET'> 


     <table> 
      <tr> 
       <td>User:</td> 
       <td><input type='text' name='j_username' value=''> 
       </td> 
      </tr> 
      <tr> 
       <td>Password:</td> 
       <td><input type='password' name='j_password' /> 
       </td> 
      </tr> 
      <tr> 
       <td colspan='2'><input name="submit" type="submit" 
        value="submit" /> 
       </td> 
      </tr> 
      <tr> 
       <td colspan='2'><input name="reset" type="reset" /> 
       </td> 
      </tr> 
     </table> 

    </form> 
</body> 
</html> 

web.xmlの

<?xml version="1.0"?> 

<web-app xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4" id="WebApp_ID"> 
<display-name>Spring MVC</display-name> 

<servlet> 
<servlet-name>mvc-dispatcher</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>mvc-dispatcher</servlet-name> 
<url-pattern>/</url-pattern> 
</servlet-mapping> 

<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value> 
     /WEB-INF/mvc-dispatcher-servlet.xml,/WEB-INF/spring-security.xml 
     </param-value> 
</context-param> 
<filter> 
<filter-name>springSecurityFilterChain</filter-name> 
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>springSecurityFilterChain</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 
</web-app> 

MVC-ディスパッチャ-servlet.xml

<?xml version="1.0"?> 
<beans xsi:schemaLocation=" http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.3.xsd" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
    xmlns="http://www.springframework.org/schema/beans"> 
<context:component-scan base-package="test"/> 
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix"> 
     <value>/WEB-INF/pages/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 
</bean> 

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>mymessages</value> 
     </list> 
    </property> 
</bean> 
</beans> 

LoginController.java

package test; 

import java.security.Principal; 

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

@Controller 
public class LoginController { 

    @RequestMapping(value = "/welcome", method = RequestMethod.GET) 
    public String printWelcome(ModelMap model,Principal principal) { 
     System.out.println("*****Hello controller called***"); 
     String name = principal.getName(); 
     model.addAttribute("username", name); 
     model.addAttribute("message","spring security custom form example"); 
     return "hello"; 

    } 

    @RequestMapping(value = "/login", method = RequestMethod.GET) 
    public String login(ModelMap model) { 

     return "login"; 
    } 


    @RequestMapping(value = "/loginfailed", method = RequestMethod.GET) 
    public String loginerror(ModelMap model) { 

     model.addAttribute("error","true"); 
     return "login"; 
    } 

    @RequestMapping(value = "/logout", method = RequestMethod.GET) 
    public String logout(ModelMap model) { 

     return "login"; 
    } 

    @RequestMapping(value = "/*", method = RequestMethod.GET) 
    public String home(ModelMap model) { 

     return "home"; 
    } 
} 

春-のsecurity.xml

<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
    http://www.springframework.org/schema/security 
    http://www.springframework.org/schema/security/spring-security-4.2.xsd"> 

    <!-- <http auto-config="true"> 
     <intercept-url pattern="/welcome*" access="hasRole('ROLE_USER')" /> 
     <http-basic /> 
    </http> --> 

    <!-- <http> 
     <intercept-url pattern="/welcome*" access="hasRole('ROLE_USER')"/> 
     <form-login/> 
     <logout logout-success-url="/home"/> 
    </http> --> 

    <http> 
     <intercept-url pattern="/welcome*" access="hasRole('ROLE_USER')"/> 
     <form-login login-page="/login" default-target-url="/welcome" authentication-failure-url ="/loginfailed" /> 
     <logout logout-success-url="/logout"/> 
     <csrf disabled="true"/> 
    </http> 

    <authentication-manager> 
     <authentication-provider> 
      <user-service> 
      <user name="rahul" password="123" authorities="ROLE_USER" /> 
      </user-service> 
     </authentication-provider> 
    </authentication-manager> 

</beans:beans> 

答えて

0

は作るためにあなたの春のセキュリティフォーム・ログインにこれ​​らのパラメータを追加してみてください名前付きリクエストパラメータが正しいことを確認してください。

<form-login login-page="/login" username-parameter="j_username" 
    password-parameter="j_password" default-target-url="/welcome" 
    authentication-failure-url ="/loginfailed" /> 

はまた、あなたのフォームを変更してください:

<form name='loginForm' 
      action="<c:url value='j_spring_security_check' />" method='POST'> 

また、あなたのログアウトがPOSTである必要があり、GETがログアウトはサポートされていません。実際にあなたはそれを必要としません。ちょうどのようにしてください:

<c:url value="/j_spring_security_logout" var="logoutUrl" /> 

<form action="${logoutUrl}" method="post" id="logoutForm"> 
</form> 
関連する問題