테이블 생성
CREATE TABLE Users ( username VARCHAR ( 25 ) NOT NULL, password VARCHAR ( 25 ) NOT NULL, enabled VARCHAR ( 5 ) DEFAULT 'true', CONSTRAINT pk_users PRIMARY KEY (username) ); |
CREATE TABLE Authorities ( username varchar(15) not null, authority varchar(15) not null, primary key (username, authority) ); |
테이블을 만들고, 데이터를 입력한 뒤에 Spring의 context 설정을 변경한다.
테이터 입력시 주의할 점은 authority 컬럼 값으로 사용할 Role 에 대한 문자열은
대소문자를 구별하기 때문에 이를 유의해야 할 필요가 있다.
일반적으로 ROLE_ 을 접두어로 많이 쓰기 때문에
대문자로 입력하는 것이 좋을 것 같다.
INSERT INTO USERS VALUES('younghoe', 'info', 'true');
INSERT INTO AUTHORITIES VALUES('younghoe', 'ADMIN');
테이블 구조가 위와 같으면 별다른 설정이 필요없다.
테이블 구조가 다르면.. 프로퍼티 설정 변경만으로 수정이 가능하지만
ORM 도구로 JDBC 를 대신하려고 하는 경우는 코드 수정이 필요할 것이다.
<!-- UserDetailsService -->
<bean id="jdbcDaoImpl"
class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="rolePrefix" value="ROLE_" />
</bean>
물론 dataSource 에 대한 정의가 spring-context 어딘가엔 정의되어 있어야 한다.
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
UserDetailsService 구현 클래스를 변경했으니
이를 사용하는 daoAuthenticationProvider 의 프로퍼티 값도 변경해야 한다.
<!-- DAO Authentication Provider -->
<bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="jdbcDaoImpl" />
</bean>
이제 메모리 Map 대신에 JDBC 를 사용하여 인증을 수행할 수 있다.
<login-config>
<auth-method>FORM</auth-method>
<realm-name>jdbcRealm</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/login.xhtml</form-error-page>
</form-login-config>
</login-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure Pages</web-resource-name>
<description/>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ADMINS</role-name>
</auth-constraint>
</security-constraint>
<security-role-mapping> <role-name>USERS</role-name> <group-name>USERS</group-name> </security-role-mapping> <security-role-mapping> <role-name>ADMINS</role-name> <group-name>ADMINS</group-name> </security-role-mapping>
'Programming > JAVA,JSP' 카테고리의 다른 글
Web Browser 점유율 통계 (0) | 2016.04.18 |
---|---|
Activex Event use in JavaScript (0) | 2016.04.14 |
ImageFrameTest (0) | 2016.02.05 |
Java 채팅 프로그램 (0) | 2016.02.04 |
Java 채팅 소스 예제 #1 (0) | 2016.02.04 |