안녕하세요, spring을 어설프게 만져보고 있는 학생입니다..
다름이 아니라 security 로그인 시 db연동이 안 되어서 질문드립니다.
우선 security_context.xml에서 권한 설정은 이렇게 했고요,
<security:http auto-config="true" use-expressions="true">
<security:form-login login-page="/loginForm"
authentication-failure-url="/loginForm?ng"/>
<security:logout logout-url="/logout"
logout-success-url="/"/>
<security:intercept-url pattern="/writer/**" access="hasAnyRole('ROLE_WRITER')"/>
<security:intercept-url pattern="/user/**" access="hasAnyRole('ROLE_USER','ROLE_WRITER')"/>
<security:intercept-url pattern="/**" access="permitAll"/>
</security:http>
테이블은 이렇게 작성했습다.
시큐리티 로그인은 인라인 방식과, db연결 방식이 있는 것으로 알고 있습니다. 인라인은 user-service를 이용하는 다음과 같은 방식을 사용했고요, 로그인시 둘 다 정상적으로 잘 되었습니다. (security_context.xml권한 설정 바로 아래 작성한 코드입니다.)
<security:user-service>
<security:user name="user" password="123" authorities="ROLE_USER"/>
<security:user name="writer" password="123" authorities="ROLE_WRITER"/>
</security:user-service>
그런데 db연동만 하려고 하면 자꾸 로그인 실패 메시지가 뜹니다 ㅠ jdbc-user-service를 사용하여 연동했습니다. 이론상으로는 맞는 것 같은데 왜 연결이 왜 안 되는지 모르겠습니다... 인라인 방식으로 로그인이 잘 된 것을 보면 시큐리티 자체의 문제는 아닌 것 같은데 말이에요ㅠㅠ
<security:jdbc-user-service data-source-ref="dataSource" id="userService"
users-by-username-query="SELECT userId AS username, userPw AS password, enabled
FROM MVC_USER WHERE userId=?"
authorities-by-username-query="SELECT userId as username, authority
FROM MVC_USER WHERE userId=?" />
loginform.jsp의 코드입니다. 시큐리티 버전은 4입니다.
<c:url value="login" var="loginUrl"/>
<form action="${loginUrl}" method="post">
<c:if test="${param.ng != null}">
<p>
LogIn NG! <br />
<c:if test="${SPRING_SECURITY_LAST_EXCEPTION != NULL}">
message : <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}" />
</c:if>
</p>
</c:if>
<div class="login-box">
<h1>Login</h1>
<div class="textbox">
<i class="fa fa-user" aria-hidden="true"></i>
<input type="text" name="username" placeholder="Username"> <br />
</div>
<div class="textbox">
<i class="fa fa-lock" aria-hidden="true"></i>
<input type="text" name="password" placeholder="Password"> <br />
</div>
<input class="btn" type="submit" value="Sign in">
</div>
<input name="${_csrf.parameterName}" type="hidden" value="${_csrf.token}">
</form>