이브
415
2017-06-22 22:33:16 작성 2017-06-22 22:40:48 수정됨
7
1059

[초보] spring security 로그인 도움을 부탁 드립니다.


많은 분들께 조언도 받고 조금씩 개선이 되어가고 있는데요.

아무리 다시 해도 로그인이 안되는 이유를 정말 모르겠습니다...

뭔가 오류 메세지라도 있어야 찾아보기라도 할텐데...@_@


로그인 페이지에서 아무리 시도를 해 봐도.. 그냥 다시 로그인 페이지로 돌아올 뿐 진행이 안되네요...

   >>  


제가 참고로 한 블로그는 http://jjeong.tistory.com/609 의 [Login 예제] 부분입니다.


security-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.xsd
	http://www.springframework.org/schema/security
	http://www.springframework.org/schema/security/spring-security.xsd
	">

	<http pattern="/resources/**" security="none" />

	<http auto-config="true" use-expressions="true">
		<intercept-url pattern="/authority/loginView" access="permitAll" />
		<intercept-url pattern="/authority/makeAccount" access="permitAll" />
		<intercept-url pattern="/authority/makeAccountSubmit" access="permitAll" />
		<intercept-url pattern="/**" access="hasAnyRole('USER','ADMIN')" />
		<form-login login-page="/authority/loginView" default-target-url="/" username-parameter="j_username" password-parameter="j_password" />
		<logout invalidate-session="true" logout-url="/logout" logout-success-url="/loginView" />
	</http>

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

</beans:beans>

이렇게 해서 intercept와 css등의 resource는 로딩이 되는 상황입니다.


authorityController.java

package com.starter.controller;

import java.util.HashMap;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class authorityController {
	
	@RequestMapping("/authority/loginView")
	public ModelAndView loginView(@RequestParam HashMap<String, Object> map) throws Exception{
		ModelAndView mv = new ModelAndView("/authority/loginView");
		return mv;
	}
}

이렇게 controller는 loginView의 맵핑을 위해서만 작성을 해 둔 상태이고,


loginView.jsp

<body>

<h2>login View</h2> </br>

	<c:if test="${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='POST'>
		<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
		<table>
			<tr>
				<td>User:</td>
				<td><input type='text' name='j_username' />
				</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>

조언을 받아서 csrf토큰을 hidden으로 넘기는 view를 만든 상태입니다.


참고로 하는 블로그에서는 이렇게하면 로그인이 되고, default-target-url="/" 에 따라서,

로그인이 되면 localhost:8080/ 으로 이동하게 만들어 본 것인데...


도대체 왜 안될까요 ㅠㅠ...

0
0
  • 답변 7

  • 재미없다~
    1k
    2017-06-22 22:51:38
    개발자도구로 로그인할때 요청하는 주소 확인해 보시고

    form-login에 login-processing-url="확인한주소"

    추가해도 안되려나요.
    0
  • 이브
    415
    2017-06-23 12:11:47 작성 2017-06-23 12:14:30 수정됨

    재미없다~ 님,

    말씀하시는 거 포풍 검색해서... 크롬 개발자도구 > Network의 내용이 아래와 같습니다.


    잘 보이시지 않을꺼 같은데...로그인 과정을 시도하면(guest/guest로 submit 하면)

    j_spring_security_check라는 항목이 생기게 됩니다.


    그리고 말씀하신 login-processing-url="확인한 주소" 이 부분은 제가 제대로 이해를 못해서...

    <form-login login-page="/authority/loginView" login-processing-url="j_spring_security_check" default-target-url="/" username-parameter="j_username" password-parameter="j_password" />

    요렇게 해 보았는데 말씀하신대로 한게 맞는지 모르겠습니다..근데 일단은 안되네요 ㅠㅠ..

    0
  • 이브
    415
    2017-06-23 12:14:46

    + 잘 안보여서 다시 확대를...


    0
  • 재미없다~
    1k
    2017-06-23 17:57:58

    jsp 파일에 저블로그에 나와있는


    ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}

    이거 추가하고 에러메세지나오는지도 확인해보세요

    web.xml 시큐리티 필터는 당연히 추가 하신거죠?

    0
  • 이브
    415
    2017-06-23 19:03:21 작성 2017-06-23 19:03:39 수정됨

    재미없다~ 님,


    메세지 부분은 아래 처럼 넣어뒀었는데 아무런 반응이 없습니다. ㅠ

    	<c:if test="${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>


    web.xml은 아래 처럼 filter 부분을 추가 했구요. ㅠㅠ 왜 이럴까요... 뭐 특별히 건든게 없이 복사만 한건데 이상하네요 ㅠㅠ...

    	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>
    			/WEB-INF/spring/root-context.xml,
    			/WEB-INF/spring/security-context.xml
    		</param-value>
    	</context-param>
    	
    	<!-- Creates the Spring Container shared by all Servlets and Filters -->
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>
    
    	<!-- Processes application requests -->
    	<servlet>
    		<servlet-name>appServlet</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    		
    	<servlet-mapping>
    		<servlet-name>appServlet</servlet-name>
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    
    	<!-- welcome file / index.jsp 경로 : webapp 폴더 안 -->
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    
    	<!-- encording -->
    	<filter>
    	    <filter-name>encodingFilter</filter-name>
    	<filter-class>
    	        org.springframework.web.filter.CharacterEncodingFilter
    	</filter-class>
    	<init-param>
    	    <param-name>encoding</param-name>
    	    <param-value>utf-8</param-value>
    	</init-param>
    	</filter>
    	<filter-mapping>
    	    <filter-name>encodingFilter</filter-name>
    	<url-pattern>*</url-pattern>
    	</filter-mapping>
    	
    	<!-- spring security -->
    	<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>


    0
  • 재미없다~
    1k
    2017-06-25 09:23:39 작성 2017-06-25 09:31:39 수정됨

    아뇨 

    지금 error가 계속 empty로 넘어오는거 같은데

    ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}

    는 if밖에다 적으셔야 나올거같네요 error를 컨트롤러에서 담아주는데도 없눈거같은데 저블로그에 링크돼있는 원본글 가보시면 인증실패까지 적혀있는데 제대로 안옮긴거같네요

    0
  • 이브
    415
    2017-06-26 11:07:11

    재미없다~ 님, 네 이렇게 계속되는 질문에도 대답해주셔서 감사합니다.

    아직 에러를 잡지는 못했는데 계속 시도해보겠습니다 감사합니다 ^^.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.