이브
415
2017-07-09 23:19:22
2
714

[초보] 스프링 시큐리티 DB 로그인 좀 도와주세요~


안녕하세요. in-memory라고 하나요..?

<user-service>
	<user name="guest" password="guest" authorities="ROLE_ADMIN"/>
</user-service>

요걸로 로그인/아웃을 여기서 많은 도움을 받아서 성공 했습니다.


이제 DB로 연결을 해 보려고 이래저래 시도중인데..

역시나 또 막혀서 며칠간 도전해보다가 안돼서 질문을 드립니다.


security-context.xml

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

<http auto-config="true" use-expressions="true">
	<intercept-url pattern="/authority/loginView" access="permitAll" />
	<intercept-url pattern="/**" access="hasAnyRole('ROLE_ADMIN')" />
	<form-login
		login-page="/authority/loginView"
		default-target-url="/"
		login-processing-url="/j_spring_security_check"
		username-parameter="username"
		password-parameter="password" />
	<logout
		logout-success-url="/"
		logout-url="/logout" />
	<csrf/>
</http>

<authentication-manager>
	<authentication-provider>
		<jdbc-user-service data-source-ref="dataSource"
			users-by-username-query="
				SELECT USERS_ID , USERS_PW FROM USERS WHERE USERS_ID = ?"
			authorities-by-username-query="
				SELECT USERS_ID, ROLE_NAME FROM ROLE WHERE USERS_ID = ?"
		/>
		<user-service>
			<user name="guest" password="guest" authorities="ROLE_ADMIN"/>
		</user-service>
	</authentication-provider>
</authentication-manager>


SQL

CREATE TABLE USERS(
	USERS_IDX NUMBER PRIMARY KEY,
	USERS_ID VARCHAR2(255),
	USERS_PW VARCHAR2(255)
);

CREATE TABLE ROLE(
	ROLE_IDX NUMBER PRIMARY KEY,
	ROLE_NAME VARCHAR2(255),
	USERS_ID VARCHAR2(255)
);

이렇게 테이블을 만들어서 기초 데이터를 넣은 상태입니다.



authority/loginView

<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='username' />
			</td>
		</tr>
		<tr>
			<td>Password:</td>
			<td><input type='password' name='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>

요걸로 "ASDF" "1234"를 입력해서 실행을 해보면,


아래 페이지로 연결이 됩니다.

http://localhost:8080/authority/loginView?error


error가 들어가는 걸로 봐서는 제대로 인식을 못하는 것 같은데요.

뭘 틀렸는지 찾지를 못하고 있습니다. 조언을 부탁 드립니다. 감사합니다. (m  _ _)m

0
0
  • 답변 2

  •  (づ。◕ ܫ ◕。)づ
    4k
    2017-07-10 07:31:34

    유저 테이블에 enabled필드를 추가한뒤 디폴트 true로 해보시고 쿼리에도 추가해보세요

    enabled필드가 없어서 false로 에러난건 아닐지


    0
  • 이브
    415
    2017-07-10 10:57:47

    KDEV 님,

    조언 해 주신 내용 참고해서 아래와 같이 CREATE를 했습니다.



    * 오라클을 사용중이라 BOOLEAN을 쓸 수 없어서 검색해보니 VARCHAR2로 TRUE를 넣으라고 되어 있어서 이렇게 해 보았습니다.


    그리고 아래 처럼 CONTEXT를 수정 했는데 제가 잘못 이해를 한 것인지 안되네요 ㅠㅠ..

    <authentication-manager>
    	<authentication-provider>
    		<jdbc-user-service data-source-ref="dataSource"
    			users-by-username-query="
    				SELECT USERS_ID , USERS_PW, USERS_ENABLED FROM USERS WHERE USERS_ID = ?"
    			authorities-by-username-query="
    				SELECT USERS_ID, ROLE_NAME FROM ROLE WHERE USERS_ID = ?"
    		/>
    		<user-service>
    			<user name="guest" password="guest" authorities="ROLE_ADMIN"/>
    		</user-service>
    	</authentication-provider>
    </authentication-manager>


    제가 잘못 이해를 한 것일까요?

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