JDBC Realm

Programming/JAVA,JSP 2016. 3. 9. 14:16 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

테이블 생성


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