전등
12
2019-07-03 20:40:13
0
114

spring security 로그인 db연동 에러 질문드립니다.


안녕하세요, 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>


서버가 돌아가고 화면이 나오긴하는데, 기능작동이 안 되니까 너무 답답하네요 ㅠㅠ 고수님들의 답변 부탁드립니다!
0
0
  • 답변 0

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