'Spring'에 해당되는 글 13건

  1. 2016.09.19 [Tomcat] Spring framework 사용 시 중복 실행 이슈
  2. 2014.02.12 [eclipse] tomcat 실행 시 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 에러 (1)
  3. 2013.08.13 [Spring] properties 파일 읽기.
  4. 2013.08.13 [Spring] Controller Content-Type 설정. (ajax)
  5. 2012.03.13 4. Spring MVC 에 Hibernate 적용해 보기.
  6. 2012.03.12 Spring Security <password-encoder>
  7. 2012.03.12 Spring Security InMemory + JDBCImpl 설정 방법.
  8. 2012.03.12 3. Spring MVC 에 Spring Security 적용해 보기 (1)
  9. 2012.03.12 2. Spring MVC 에 MyBatis 적용해 보기. (2)
  10. 2012.03.08 Spring Framework 설정관련 기초.

[Tomcat] Spring framework 사용 시 중복 실행 이슈

ITWeb/개발일반 2016.09.19 11:08

tomcat + spring 을 사용하면서 startup.sh 를 이용해서 실행 후 로그를 확인해 보면 두 번 실행(로딩) 되는 모습을 확인 할 때가 있습니다.


이렇게 두 번 실행이 될 경우 예상하지 못했던 문제를 가끔 경험 하게 되는데요.

아래와 같이 tomcat 의 server.xml 수정을 통해서 한 번만 실행 되도록 처리 할 수 있습니다.


기존 두 번 실행 되던 server.xml)

    <Engine name="Catalina" defaultHost="localhost">

      <Host name="localhost"  appBase="webapps"

            unpackWARs="false" autoDeploy="false">

        <Context docBase="web-service" path="/" reloadable="false" />

      </Host>

    </Engine>



수정된 server.xml)

    <Engine name="Catalina" defaultHost="localhost">

      <Host name="localhost"  appBase="webapps/web-service"

            unpackWARs="false" autoDeploy="false">

        <Context docBase="" path="/" reloadable="false" />

      </Host>

    </Engine>


그냥 별건 아니지만 scheduler 같은 컴포넌트를 사용하시는 경우 중복 실행이 될 수 있기 때문에 공유해 봅니다.

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

[eclipse] tomcat 실행 시 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 에러

ITWeb/개발일반 2014.02.12 11:14

eclipse 에서 spring mvc 프로젝트 생성하고 tomcat 등록 후 바로 실행 하면 아래와 같은 에러가 발생 할 때가 있습니다.

뭐 다들 아시는 내용이겠지만 기억력을 돕기 위해 기록을 남겨 보도록 하겠습니다.


1. 생성한 프로젝트의 properties  창을엽니다. ( alt + f + enter )

2. Deployment Assembly 를 선택 합니다.

3. 오른쪽 위 Add 버튼을 클릭 합니다.

4. Java Build Path Entries  선택 후 Next 버튼 클릭 합니다.

5. Maven Dependencies  선택 후 Finish 버튼 클릭 합니다.

6. Properties 창 오른쪽 하단의 Apply 버튼 클릭 합니다.

7. Properties 창 오른쪽 하단의 OK 버튼 클릭 후 tomcat 재실행을 해봅니다.



이렇게 하시면 정상적으로 동작 하게 됩니다.

뭐 원인은 빤하죠.

tomcat 에 해당 spring mvc 실행을 위한 class 가 포함이 안되서 그런 것이니 이와 같이 설정만 해주면 끝....


신고
크리에이티브 커먼즈 라이선스
Creative Commons License
tags : eclipse, Spring, tomcat
Trackback 0 : Comment 1

[Spring] properties 파일 읽기.

ITWeb/개발일반 2013.08.13 18:35

해당 프로젝트에 conf 디렉토리 하나 만드시고 거기에 profile 별 디렉토리도 만드시고.. 

아래 같이 해주면 됩니다. (뭐 나만 알아 볼라고 대충 등록함.)



[pom.xml]

<resource>

<directory>${basedir}/conf/${env}</directory>

<targetPath>${project.build.directory}/conf</targetPath>

<filtering>false</filtering>

</resource>


[class]

resource = new ClassPathResource(propsFile);

props = PropertiesLoaderUtils.loadProperties(resource);


clusterName = props.getProperty("cluster.name");


[properties]

cluster.name=es-cluster

cluster.node.list=192.168.56.104:9300,192.168.56.104:9301


신고
크리에이티브 커먼즈 라이선스
Creative Commons License
tags : properties, Spring
Trackback 0 : Comment 0

[Spring] Controller Content-Type 설정. (ajax)

ITWeb/개발일반 2013.08.13 18:23

그냥 개발 하다 자꾸 까먹는 것들... 정리 차원에서.. ^^;

- spring controller 클래스에서 호출 method 에 설정

@RequestMapping(value = "/api", method = RequestMethod.POST, produces = "application/json; charset=utf-8")


- serve.xml 에서 URIEncoding 설정

http connector 에 설정

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

4. Spring MVC 에 Hibernate 적용해 보기.

ITWeb/개발일반 2012.03.13 16:18
※ 아래 코드에 delete 시 동작 안하는 문제가 있어서 코드 수정했습니다.
 

[contact.xml]

<id name="id" type="long"> // int 에서 long 으로 변경

 
[Contact*.java]

private Long id; // 역시 int 에서 Long 으로 변경 당연히 setter/getter/param 다 변경


[ContactDAOImpl.java]

// ...delete(contact); 가 정상적으로 동작하지 않아 아래 처럼 변경.
this.sessionFactory.getCurrentSession().createQuery("delete Contact where id=:id").setLong("id", id).executeUpdate();


[수정된 Project]
 proto.orm.zip





Spring MVC 에 다른 사이트의 HIbernate 예제 코드로 작성하였습니다.
- 해당 예제 코드를 그대로 사용할경우 안되는 부분이 있어서 직접 수정하여 반영합니다.

[Hibernate 예제코드]


[소스코드]

- Eclipse import 하시면 프로젝트 확인 가능 합니다.


※ import/export 방법은 아래 글 참고하세요.
http://jjeong.tistory.com/564 


1. Spring MVC 구성해 보기.
2. Spring MVC 에 MyBatis 적용해 보기.
3. Spring MVC 에 Spring Security 적용해 보기. 
4. Spring MVC 에 Hibernate 적용해 보기. 
5. 2+3번 적용해 보기.
6. 3+4번 적용해 보기. 


- 소스코드를 첨부 하였으므로 요약 정보만 기술 합니다.

[Table 생성]

Database : Mysql.protodb

CREATE TABLE CONTACTS

(

    id              INT PRIMARY KEY AUTO_INCREMENT,

    firstname    VARCHAR(30),

    lastname    VARCHAR(30),

    telephone   VARCHAR(15),

    email         VARCHAR(30),

    created     TIMESTAMP DEFAULT NOW()

); 



[pom.xml]

        <!-- spring framework jdbc 설정 -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-jdbc</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>


        <!-- spring framework transaction 설정 -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-tx</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>


        <!-- spring framework orm 설정 -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-orm</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>


        <!-- hibernate dependency 설정 start -->

        <dependency>

            <groupId>org.hibernate</groupId>

            <artifactId>hibernate-core</artifactId>

            <version>3.6.9.Final</version>

        </dependency>


        <dependency>

            <groupId>dom4j</groupId>

            <artifactId>dom4j</artifactId>

            <version>1.6.1</version>

        </dependency>

        <dependency>

            <groupId>commons-collections</groupId>

            <artifactId>commons-collections</artifactId>

            <version>3.2.1</version>

        </dependency>


        <dependency>

            <groupId>org.javassist</groupId>

            <artifactId>javassist</artifactId>

            <version>3.15.0-GA</version>

        </dependency>


        <dependency>

            <groupId>cglib</groupId>

            <artifactId>cglib</artifactId>

            <version>2.2.2</version>

        </dependency>


        <dependency>

            <groupId>org.apache.commons</groupId>

            <artifactId>commons-lang3</artifactId>

            <version>3.1</version>

        </dependency>

        <!-- hibernate dependency 설정 end -->


        <!-- mysql -->

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>5.1.18</version>

        </dependency>


        <!-- apache commons dbcp -->

        <dependency>

            <groupId>commons-dbcp</groupId>

            <artifactId>commons-dbcp</artifactId>

            <version>1.2.2</version>

        </dependency>

- dependency 관련 파일들은 이제 어느 정도 설정 하는데 무리가 없으시죠. 자세한 내용은 아래 링크에


[web.xml]

 <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>

            /WEB-INF/spring/root-context.xml

            classpath:context/**/applicationContext*.xml

        </param-value>

    </context-param>
.... 중략

    <filter>

   <filter-name>openSessionInViewFilter</filter-name>

   <filter-class>

       org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

   </filter-class>

    </filter>


    <filter-mapping>

        <filter-name>openSessionInViewFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping> 



[applicationContext-hibernate.xml]

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"

    xmlns:context="http://www.springframework.org/schema/context"

    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang"

    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"

    xmlns:util="http://www.springframework.org/schema/util"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd

        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd

        http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd

        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">


    <bean id="messageSource"

        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">

        <property name="basename" value="classpath:messages/message" />

        <property name="defaultEncoding" value="UTF-8" />

    </bean>


    <bean id="localeChangeInterceptor"

        class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">

        <property name="paramName" value="lang" />

    </bean>


    <bean id="localeResolver"

        class="org.springframework.web.servlet.i18n.CookieLocaleResolver">

        <property name="defaultLocale" value="ko" />

    </bean>


    <bean id="handlerMapping"

        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">

        <property name="interceptors">

            <ref bean="localeChangeInterceptor" />

        </property>

    </bean>


    <bean id="propertyConfigurer"

        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"

        p:location="classpath:configuration/hibernate/config.properties" />


    <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>


    <bean id="sessionFactory"

        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        <property name="dataSource" ref="dataSource" />

        <property name="hibernateProperties">

            <props>

                <prop key="hibernate.dialect">${jdbc.dialect}</prop>

                <prop key="hibernate.show_sql">true</prop>

            </props>

        </property>

        <property name="mappingResources">

            <list>

                <value>/sql/hibernate/mapper/contact.xml</value>

            </list>

        </property>

    </bean>


    <bean id="transactionManager"

        class="org.springframework.orm.hibernate3.HibernateTransactionManager">

        <property name="sessionFactory" ref="sessionFactory" />

    </bean>


    <tx:annotation-driven transaction-manager="transactionManager" />


    <bean id="contactDAO" class="proto.orm.board.contact.dao.ContactDAOImpl">

        <property name="sessionFactory" ref="sessionFactory" />

    </bean>

</beans>

- 간혹 아래와 같은 오류가 날때가 있습니다.

org.hibernate.HibernateException: No Session found for current thread

-> 이건 sessionFactory 설정을 잘못해서 나옵니다.

-> sessionFactory 를 중복 선언 하거나 (include 도니 파일 잘 찾아 보세요.)

-> web.xml 에 openSessionInViewFilter 설정이 빠져 있는지 확인 합니다.



Unable to instantiate default tuplizer 

-> 이건 domain 객체에서 setter/getter 설정 오류 이거나 mapping 오류일 경우 발생 합니다.

-> domain 객체를 한번 검토해 보시고 hibernate mapping xml 에 선언한 내용과 일치 하는지도 확인해 보세요.



org.hibernate.hql.ast.QuerySyntaxException: xxxx is not mapped [FROM xxxx]  

-> 이건  createQuery("FROM 도메인객체명") 으로 표기를 해야 하는데 간혹 Table 이른을 넣다 보면 오류가 납니다.

-> 본 예제에서는 Contact Object 이므로 createQuery("FROM Contact") 이라고 써줘야 합니다. 



[config.properties]

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.dialect=org.hibernate.dialect.MySQLDialect

jdbc.url=jdbc:mysql://localhost:3306/protodb?autoReconnect=true

jdbc.username=root

jdbc.password=1234



[contact.xml]

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="proto.orm.board.contact.domain.Contact" table="contacts">

        <id name="id" type="int">

            <column name="id" />

            <generator class="identity" />

        </id>

        <property name="firstname" type="string">

            <column name="firstname" length="30" not-null="false" />

        </property>

        <property name="lastname" type="string">

            <column name="lastname" length="30" not-null="false" />

        </property>

        <property name="telephone" type="string">

            <column name="telephone" length="15" not-null="false" />

        </property>

        <property name="email" type="string">

            <column name="email" length="30" not-null="false" />

        </property>

        <property name="created" type="timestamp">

            <column name="created" not-null="false" />

        </property>

    </class>

</hibernate-mapping>

- 이 파일은 hibernate ref. 중 mapping 부분 참고하세요.



[ContactController.java]

더보기



[ContactServiceImpl.java] 

더보기



[ContactDAOImpl.java] 

더보기



[Contact.java]

더보기



[contact.jsp]

더보기



[참고사이트]

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
tags : hibernate, MVC, Spring
Trackback 0 : Comment 0

Spring Security <password-encoder>

ITWeb/개발일반 2012.03.12 18:05
코드는 아래 처럼 사용하면 됩니다.

        <authentication-provider user-service-ref="userDetailsService">

            <password-encoder hash="md5" base64="true"/>

        </authentication-provider>

- 의미는 md5 hash 알고리즘을 사용하고,
- base64 인코딩을 해서 사용한다는 의미 입니다.
- 결국 client 에서 전달 되는 값들을 md5 로 암호화 하고 base64로 인코딩 후 password 비교를 하게 됩니다.
- DB 에 password 저장 시 당연히 md5 암호화를 하고 base64 encoding 후 저장을 해야 정상적으로 비교가 되겠죠..

[참고내용]
- URL :  http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#nsa-password-encoder 

B.2.4 <password-encoder>

Authentication providers can optionally be configured to use a password encoder as described in the namespace introduction. This will result in the bean being injected with the appropriate PasswordEncoder instance, potentially with an accompanying SaltSource bean to provide salt values for hashing.

Parent Elements of <password-encoder>

<password-encoder> Attributes

base64

Whether a string should be base64 encoded

hash

Defines the hashing algorithm used on user passwords. We recommend strongly against using MD4, as it is a very weak hashing algorithm.

ref

Defines a reference to a Spring bean that implements PasswordEncoder .

Child Elements of <password-encoder>


신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

Spring Security InMemory + JDBCImpl 설정 방법.

ITWeb/개발일반 2012.03.12 17:22
가장 쉽게 접근할 수 있는 방법에 대해서 기술 합니다.
모든 내용의 기초는 아래 사이트에서 참고하였습니다.
- 없는건 검색했고요.. ㅎㅎ

 

[spring-security.xml InMemory] 

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"

    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

           http://www.springframework.org/schema/security

           http://www.springframework.org/schema/security/spring-security-3.1.xsd">


    <global-method-security secured-annotations="enabled" />


    <http auto-config='true'>

        <intercept-url pattern="/login.html*" access="IS_AUTHENTICATED_ANONYMOUSLY" />

        <intercept-url pattern="/welcome.html*" access="IS_AUTHENTICATED_ANONYMOUSLY" />

        <intercept-url pattern="/**" access="ROLE_ADMIN" />

        <form-login login-page='/login.html' default-target-url='/index.html' always-use-default-target='true' authentication-failure-url="/login.html" />

        <logout logout-success-url="/welcome.html" delete-cookies="JSESSIONID" />

        <remember-me key="daSDAsdaSDsa" />

    </http>


    <authentication-manager>

        <authentication-provider>

<!-- in memory case user-service start -->

            <user-service>

                <user name="jimi" password="1234" authorities="ROLE_USER, ROLE_ADMIN" />

                <user name="bob" password="1234" authorities="ROLE_USER" />

            </user-service>

<!-- in memory case user-service end -->

        </authentication-provider>

    </authentication-manager> 



[spring-security.xml JDBCImpl Case 1]
- InMemory 코드에서 빨간 부분이 변경 됩니다.

<!-- jdbcImpl case 1 start -->

            <jdbc-user-service data-source-ref="dataSource"

                users-by-username-query="SELECT username, password, enabled FROM users WHERE username=?"

                authorities-by-username-query="SELECT u.username, au.authority FROM users u, authorities au WHERE u.username=? AND au.username=u.username"

            />

<!-- jdbcImpl case 1 end -->



[spring-security.xml JDBCImpl Case 2]

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"

    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

           http://www.springframework.org/schema/security

           http://www.springframework.org/schema/security/spring-security-3.1.xsd">


    <global-method-security secured-annotations="enabled" />


    <http auto-config='true'>

        <intercept-url pattern="/login.html*" access="IS_AUTHENTICATED_ANONYMOUSLY" />

        <intercept-url pattern="/welcome.html*" access="IS_AUTHENTICATED_ANONYMOUSLY" />

        <intercept-url pattern="/**" access="ROLE_ADMIN" />

        <form-login login-page='/login.html' default-target-url='/index.html' always-use-default-target='true' authentication-failure-url="/login.html" />

        <logout logout-success-url="/welcome.html" delete-cookies="JSESSIONID" />

        <remember-me key="daSDAsdaSDsa" />

    </http>


    <authentication-manager>

<!-- jdbcImpl case 2 start -->

        <authentication-provider user-service-ref="userDetailsService" />

<!-- jdbcImpl case 2 end -->

    </authentication-manager>


<!-- jdbcImpl case 2 start -->

    <beans:bean id="userDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">

        <beans:property name="dataSource" ref="dataSource"/>

    </beans:bean>

<!-- jdbcImpl case 2 end -->

</beans:beans>


※ 이넘들이 사용하는 Table Schema 는 아래 글 참고 하세요.
http://jjeong.tistory.com/610  

그리고 참고하기 위해서 JdbcDaoImpl.java 코드 올려 봅니다. 
이 코드를 보시면 이해 하는데 도움이 될겁니다.

더보기


※ 코드를 보시니 이제 감이 오시나요???
그렇습니다.
JdbcImpl.java 와 같은 넘을 biz 요구사항에 맞춰서 작성을 하시면 customized authentication 과 authority 를 구현 하실 수 있습니다. ^^ 
그래도 잘 모르시겠다구요.
그럼 아래를 참고하세요.
이미 정리 된 문서가 있어서 link 겁니다.

[원본링크]

더보기

 
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

3. Spring MVC 에 Spring Security 적용해 보기

ITWeb/개발일반 2012.03.12 12:40
Spring MVC 에 기본 Minimal http configuration 에대한 소스 코드만 삽입해 놓습니다.
확장 버전은 직접 해보시는면 좋겠죠.
- 다만, 진행 하면서 코드는 추가 하겠습니다.

[소스코드]

- Eclipse import 하시면 프로젝트 확인 가능 합니다.


※ import/export 방법은 아래 글 참고하세요.
http://jjeong.tistory.com/564 


1. Spring MVC 구성해 보기.
2. Spring MVC 에 MyBatis 적용해 보기.
3. Spring MVC 에 Spring Security 적용해 보기. 
4. Spring MVC 에 Hibernate 적용해 보기. 
5. 2+3번 적용해 보기.
6. 3+4번 적용해 보기. 


- 소스코드를 첨부 하였으므로 요약 정보만 기술 합니다.

[참고링크]


[pom.xml]
- spring security 관련 dependency 추가 합니다.

<!-- Spring Security 사용을 위한 dependency 등록 Start -->

        <dependency>

            <groupId>org.springframework.security</groupId>

            <artifactId>spring-security-core</artifactId>

            <version>3.1.0.RELEASE</version>

        </dependency>

        <dependency>

            <groupId>org.springframework.security</groupId>

            <artifactId>spring-security-web</artifactId>

            <version>3.1.0.RELEASE</version>

        </dependency>

        <dependency>

            <groupId>org.springframework.security</groupId>

            <artifactId>spring-security-config</artifactId>

            <version>3.1.0.RELEASE</version>

        </dependency>

<!-- Spring Security 사용을 위한 dependency 등록 End -->



[web.xml]
- security 관련 fitler 와 context 설정을 등록 합니다.

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>

        /WEB-INF/spring/root-context.xml

        classpath:context/**/applicationContext*.xml

        </param-value>

    </context-param>


<!-- Spring Security 사용을 위해 filter 추가 Start -->

    <filter>

        <filter-name>springSecurityFilterChain</filter-name>

        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

    </filter>


    <filter-mapping>

        <filter-name>springSecurityFilterChain</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

<!-- Spring Security 사용을 위해 filter 추가 End -->



[application-security.xml]
- http security 관련 설정을 합니다.
- 메모리 기반의 인증 처리 방식 입니다. (추후 업그레이드가 되어야 하는 부분)

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"

    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

           http://www.springframework.org/schema/security

           http://www.springframework.org/schema/security/spring-security-3.1.xsd">


    <http auto-config='true'>

        <intercept-url pattern="/**" access="ROLE_USER" />

    </http>


    <authentication-manager>

        <authentication-provider>

            <user-service>

                <user name="jimi" password="1234" authorities="ROLE_USER, ROLE_ADMIN" />

                <user name="bob" password="1234" authorities="ROLE_USER" />

            </user-service>

        </authentication-provider>

    </authentication-manager>

</beans:beans>



[실행하기]
- Spring MVC 예제에서 했던 것과 같습니다.
- 이전 글을 참고해 주세요.

- 아래는 실행 시킨 결과 화면 입니다.

[테스트URL]
http://localhost:8080/security/index.html 

[인증 전]

 
[인증 후] 

 


※ 보시는 것 처럼 spring security의 시작은 아주 쉽게 따라 할 수 있습니다. 문서를 잘 참고 하시면 됩니다.
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 1

2. Spring MVC 에 MyBatis 적용해 보기.

ITWeb/개발일반 2012.03.12 10:36
Spring + Mybatis 연동은 sts 와 mybatis 문서를 기반으로 작성 하였습니다.

[소스코드]

- Eclipse import 하시면 프로젝트 확인 가능 합니다.


※ import/export 방법은 아래 글 참고하세요.
http://jjeong.tistory.com/564 


1. Spring MVC 구성해 보기.
2. Spring MVC 에 MyBatis 적용해 보기.
3. Spring MVC 에 Spring Security 적용해 보기. 
4. Spring MVC 에 Hibernate 적용해 보기. 
5. 2+3번 적용해 보기.
6. 3+4번 적용해 보기. 


- 소스코드를 첨부 하였으므로 요약 정보만 기술 합니다.

[pom.xml]

<!-- spring framework jdbc 설정 -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-jdbc</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>


<!-- mysql -->

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>5.1.18</version>

        </dependency>


<!-- mybatis -->

        <dependency>

            <groupId>org.mybatis</groupId>

            <artifactId>mybatis</artifactId>

            <version>3.0.6</version>

        </dependency>


<!-- mybatis spring -->

        <dependency>

            <groupId>org.mybatis</groupId>

            <artifactId>mybatis-spring</artifactId>

            <version>1.0.2</version>

        </dependency>


<!-- apache commons dbcp-->

        <dependency>

            <groupId>commons-dbcp</groupId>

            <artifactId>commons-dbcp</artifactId>

            <version>1.2.2</version>

        </dependency> 

- pom.xml 에서는 필요한 package depedency 를 작성해 줍니다.


[web.xml]

  <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>

        /WEB-INF/spring/root-context.xml

        classpath:context/**/applicationContext*.xml

        </param-value>

  </context-param>

- spring framework 이 처음 로딩 될때 읽어 들여야 하는 설정파일들에 대한 path 를 잡아 줍니다.


[applicationContext-mybatis.xml]

    <bean id="propertyPlaceholderConfigurer"

        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

        <property name="locations">

            <value>classpath:configuration/mybatis/config.properties</value>

        </property>

    </bean>


    <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>



<!-- http://groups.google.com/group/ksug/browse_thread/thread/766cd1fd8ba39c96 -->

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="dataSource" ref="dataSource" />

        <property name="mapperLocations" value="classpath*:sql/mybatis/mapper/**/*.xml" />

    </bean>
.... 중략

    <bean id="boardContentViewDAO" class="proto.board.dao.BoardContentViewDAOImpl">

        <property name="sqlSession" ref="sqlSession" />

    </bean> 

- dbcp 설정과 dao 에서 사용할 sqlSession 설정을 합니다.


[board.xml]

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper

    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="proto.board.mapper">


    <select id="getBoardContentView" resultType="proto.board.domain.BoardContentVO">

    SELECT

        document_srl,

        title,

        content,

        user_id,

        nick_name,

        email_address,

        regdate

    FROM

        xedemodb.xe_documents

    WHERE

        document_srl=66

    </select>

</mapper>

- 사용한 테이블은 xpressengine 이 설치 되면 기본 생성되는 xe_documents 의 테이블 입니다.
- 기본 CRUD 에 대한 내용은 mybatis 문서를 참고 하시면 아주 쉽습니다.



[config.properties]

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/xedemodb?autoReconnect=true

jdbc.username=root

jdbc.password=1234

※ jdbc url structure 참고

- 각자 접속 정보에 맞게 설정 하시면 됩니다.


[Class Flow - 초간단버전임]

http://localhost:8080/board/boardContentView

[BoardContentViewController.java]

    @Autowired

    private BoardContentViewService boardContentViewService;
    ...
    boardContentViewService.getBoardContentVO() 


[BoardContentViewServiceImpl.java]
- BoardContentViewService.java 는 interface 이므로 구현체인 BoardContentViewServiceImpl.java 확인

    @Autowired

    private BoardContentViewDAO boardContentViewDAO;


    public BoardContentVO getBoardContentVO() {

        return (BoardContentVO)boardContentViewDAO.getBoardContentVO();

    }

 

[BoardContentViewDAOImpl.java]
- BoardContentViewDAO.java 는 interface 이므로 구현체인 BoardContentViewDAOImpl.java 확인

    private SqlSession sqlSession;


    public void setSqlSession(SqlSession sqlSession) {

        this.sqlSession = sqlSession;

    }


    public BoardContentVO getBoardContentVO() {

        //boardContentVO.setContent("CONTENT");

        return (BoardContentVO) sqlSession.selectOne("proto.board.mapper.getBoardContentView");

    }


[board.xml]

<mapper namespace="proto.board.mapper">

    <select id="getBoardContentView" resultType="proto.board.domain.BoardContentVO">

    SELECT

        document_srl,

        title,

        content,

        user_id,

        nick_name,

        email_address,

        regdate

    FROM

        xedemodb.xe_documents

    WHERE

        document_srl=66

    </select>

</mapper>


[BoardContentViewVO.java]

public class BoardContentVO {

    private int documentSrl;

    private String title;

    private String content;

    private String nickname;

    private String email;

    private String regdate;


    public int getDocumentSrl() {

        return documentSrl;

    }

.... 중략

    public void setRegdate(String regdate) {

        this.regdate = regdate;

    }

}



자, 그럼 여기까지 아주 초간단 spring framework 과 mybatis 를 이용해서 SELECT 하는 것 까지 테스트 해봤습니다.
완전 기초 이니, 걍 참고만 하세요..
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
tags : MyBatis, Spring
Trackback 0 : Comments 2

Spring Framework 설정관련 기초.

ITWeb/개발일반 2012.03.08 11:20
[spring framework 에서 기본 설정의 시작]

web.xml



[web.xml 에서 contextConfigLocation]

[contextConfigLocation]

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>

            classpath:applicationContext-business.xml

            /WEB-INF/applicationContext-security.xml

        </param-value>

    </context-param>


[classpath 의 path 는 어디 일까?]

- eclipse 에서 package explorer 로 보게 되면 해당 project 의  
    src/main/resources
에 해당한다.

- build 를 하게 되면 webapp 하위에
    /WEB-INF/classes
에 해당한다.

위에 src/main/resources 에 파일을 하나 생성해 놓고 빌드를 해보면 생성한 파일이 WEB-INF/classes 에 들어가 있는걸 볼 수 있다.  



[<import resource="" /> 의 Path]

예를 들면)
web.xml 에 아래와 같이 정의 되어 있다.
- web.xml 은 기본 /WEB-INF/web.xml 에 위치한다.

[Case 1]
<import resource="root-context.xml" />
이 경우 /WEB-INF/root-context.xml 을 찾는다.

[Case 2]
<import resource="context/root-context.xml" /> 
이 경우 /WEB-INF/context/root-context.xml 을 찾는다. 

[Case 3]
<import resource="/context/root-context.xml" /> 
이 경우 /WEB-INF/context/root-context.xml 을 찾는다. 
case 2 와 동일 하다. 



[참고URL]
 
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

티스토리 툴바