Clean Code that Works.

grails 배포 하기.

grails2013. 3. 5. 15:27

지금 만들어논 사이트 에서는


git pull 을 통해서 소스를 업데이트 한후에.

grails prod war 명령어를 통해 .war 파일을 만들고

war 명령어는 기본이 dev(devlopment) 이다.

이 파일을 tomcat/webapps/ 아래로 이동한 후 배포 하는 구조로 되어 있다.

스프링 시큐리티에선 패스워드 인코딩 방식을 몇가지 지원 하는데 

로그인 시도시 입력한 패스워드를 인코딩 하고, db에 저장된 인코딩된 패스워드와 비교를 한다.


이것을 수행하는 부분은

org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks(UserDetails, UsernamePasswordAuthenticationToken)


이 부분으로 여기서 인코딩 하는데 사용된 패스워드 인코더를 가지고 패스워드를 확인한다.


참고 할 것.



jms 구현 예제

Java2013. 2. 15. 19:00

http://weblog.plexobject.com/?p=1420


참고참고

그냥 일반 DB를 하이버네이트를 써서 스프링 시큐리티로 만든 User 클래스를 사용하면, 로그인도 잘 되고 아무 문제가 없는데

User 클래스를 Neo4j로 사용하면 로그인 하는데 문제가 발생한다.


User 클래스에는 시큐리티 플러그인이 만들어준 "beforeInsert", "beforeUpdate" 메서드가 있고, 여기서 password 인코딩을 해준다.

위 이벤트들은 GORM에서 지원해 주는 것들(http://grails.org/doc/latest/guide/GORM.html#eventsAutoTimestamping)


근데 Neo4j를 사용하면.. 그냥 list 를 호출하는데도 beforeUpdate 가 계속 호출되어, 패스워드 값이 여러번 변경된다.. 

무려 3번. 그냥 list를 호출하는데도.. -_-;; 이건 뭐야!!


저게 존재하는 이유가 패스워드 인코딩을 하기 위한거니..

해결 방법은. 

User 클래스의 위의 두 메서드( beforeInsert, beforeUpdate)를 제거 하고, UserController에서 패스워드 인코딩 하는 내용을 넣어 주는 걸로 변경 함. 


꼼수로.. 하이버네이트와 Neo4j를 같이 써볼려고 했는데..

Neo4j로 쓰는 도메인과 하이버네이트로 쓰는 도메인은.. Neo4j에서 참조가 안되는 관계로 포기.


예를 들어 Neo4j 는 '학교' 이고 하이버네이트가 '학생'일때 '학교'는 '학생'을 참조하고 있으면 에러남..

당연한 이야기긴 한데.. 뭔가 GORM에서 해결했을것 같은 느낌이 들어서 시도해봄...


아 그리고 User 클래스 만들어 주는 템플릿은 스프링 시큐리티 프러그인 내에 "Person.groovy.template"로 존재함.