이런 에러가 발생 했을 경우.. 

to enable the nesting exclude '......./' from ~~~

 
pom.xml 에 아래 태그를 삭제한다.

<sourceDirectory>src</sourceDirectory> 

해결..

현재 작업하고 있는 프로젝트의 모든 프레임워크를 최신버전으로 세팅을 하고 서비스 클래스를 jUnit으로 작성해보았다...


Maven jUnit dependency
		
			junit
			junit
			4.7
			test
		


Maven Spring framework test
		
			org.springframework
			org.springframework.test
			3.2.3.RELEASE
		




AbstractApplicationContextTest.java
package com.openerp.service.test;

import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
		"file:src/resources/applicationContext-datasource.xml", 
		"file:src/resources/applicationContext-transaction.xml", 
		"file:src/resources/applicationContext.xml"
			})
public class AbstractApplicationContextTest {
	@Autowired ApplicationContext ctx;
}

여기서 ContextConfiguration의 locations이 문제가 많다.
일반적인 설정으로 dataSource, transaction, AOP 설정등 모든걸 하나의 xml에 설정을 한다면 하나만 쓰면 되지만, 위 처럼 각 기능별(또는 업무별)로 설정을 나누어 버리면 위 처럼 순서를 맞추어 주어야 한다.
그리고 applicationContext 파일의 위치가 조금 달라지면 classpath를 쓸때 생각을 많이 해야 한다.


ApplicationContext.xml
	
	
		
	

	
    
	  
	  
	  
	  
	  
			
	  
	
	
	
		 
	

어노테이션으로 bean을 자동으로 찾도록 했다.
jUnit 에서도 이 어노테이션을 가져올 수 있도록 지원하기 때문에 일일이 bean으로 서비스 클래스(테스트 대상)를 등록할 필요는 없다.

기타 설정은 패스...

UserServiceTest.java
package com.openerp.service.test;

import java.util.Calendar;
import java.util.List;
import javax.annotation.Resource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import com.openerp.common.utils.JSONUtil;
import com.openerp.common.utils.Parameters;
import com.openerp.domain.User;
import com.openerp.service.UserService;

public class UserServiceTest extends AbstractApplicationContextTest{
	private static Log log = LogFactory.getLog(UserServiceTest.class);
	
	@Resource(name="userService")
	private UserService userService;
	    
	@Test
	public void testSelectAllUser(){
		// 아래 Parameters는 그냥 Map으로 보시면 됨..
		Parameters params = new Parameters();
		params.addValue("isDisable", "");
		List users = userService.listUsers(params);
		// 아래 코드는 JSON 형식으로 바꿔주는 로직.. 
		System.out.println(JSONUtil.toJSON(users, null));
	}
}

어노테이션으로 등록된 UserService를 가지고 오기 위해 @Resource 어노테이션을 이용했다.
applicationContext.xml에 bean 태그를 이용해서 등록한 bean은 @Autowired가 가능하나, 어노테이션 검색으로 찾은 bean은 안되더라.
@Resource를 이용해서 검색하게 하니 정상적으로 작동을 한다...
지금 이 클래스는 UserService에 대한 테스트 인데 다른 Service에 대한 테스트도 해야 한다면 지금과 같이 AbstractApplicationContextTest 만 상속해서 사용을 하면 된다.
이는 각 서비스가 사용하는 설정(applicationContext)가 동일할 경우이고, 만약 각 업무별로 applicationContext을 나누어 사용한다면 AbstractApplicationContextTest 외에 다른 클래스를 만들어 상속해서 쓰면 된다.
(결론은 설정을 안쪼갰다면 하나의 슈퍼클래스에 설정을 밀어넣고 상속해서 사용한다는 것..)


jUnit 등 Test Case를 적용할 경우 편하긴 편하다.
서버(tomcat 등)를 재시작 할 필요도 없고, 코드만 고치고 해당 @Test 어노테이션이 붙은 메서드를 jUnit으로 실행만 하면 기존 방법(서버를 통한)과 동일한 결과를 이루어 낼 수 있다.
java, xml 코드 하나 고치고 빌드 -> 서버 재시작 -> 웹에서 액션 -> 결과 확인 무한 반복...
이제 이런걸 안하고도 서비스 클래스를 쉽게 작성할 수 있으니 개발 효율성이 향상되는 효과를 누릴 수 있다.

 

Security 3.1.4를 사용하면서 LoginUrl 설정을 하면서 아래와 같은 워닝을 보았다.. 
	
		
		
	

확인해 본 결과 아래와 같이 변경 되었다..

org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint.setLoginFormUrl(String) 
          use constructor injection 

그러므로 아래와 같이 변경해준다..
	
		
		
	


아래는 deprecated 된 항목을 살펴볼 수 있는 URL.

http://static.springsource.org/spring-security/site/docs/3.1.x/apidocs/deprecated-list.html 
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V

이런 에러가 나는데... SLF4J와 Spring Context 가 가지고 있는 slf4j 가 충돌이 나서 그런거므로 maven 설정을 아래와 같이..

 
		
			org.springframework
			org.springframework.spring-library
	    	libd
			3.2.3.RELEASE
			
		        
					javax.servlet
		            com.springsource.javax.servlet
				
		        
		        	org.springframework.context
		        	org.springframework
		        
		        
		        	
		        		org.springframework.context.support
		        	
		        	org.springframework
		        
			
		

		
			org.springframework
			spring-context
			3.2.3.RELEASE
			
                
                
                    commons-logging
                    commons-logging
                 
            
		
		
		
			org.springframework
			spring-context-support
			3.2.3.RELEASE
			
                
                
                    commons-logging
                    commons-logging
                 
            
		

GenericMyBatisDaoSupport.java
package com.openerp.common.dao;

import java.io.Serializable;
import java.util.ArrayList;

import org.apache.ibatis.exceptions.PersistenceException;

public interface GenericMyBatisDaoSupport{
	public T get(PK id) throws PersistenceException;//get obj of type T by the primary key 'id' 
	public ArrayList getAll() throws PersistenceException;//get all objects of type T
	public int insert(T objInstance) throws PersistenceException;//insert an object of type T into the database
	int update(T transientObject) throws PersistenceException; //update an object of type T    
	int delete(PK id)  throws PersistenceException;//delete an object of type T
}




AbstractGenericMyBatisDao.java
package com.openerp.common.dao;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.exceptions.PersistenceException;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

public class AbstractGenericMyBatisDao implements GenericMyBatisDaoSupport {
	
	private static Logger log = LoggerFactory.getLogger(AbstractGenericMyBatisDao.class);
	private static final String NAMESPACE = "Mapper"; 

	@Autowired
	private SqlSessionFactory sqlSessionFactory; //reference to mybatis session factory 
	private Class type;

	/** 
	 * Define prefixes for easier naming convetions between XML mapper files and the DAO class 
	 **/
	public static final String PREFIX_SELECT_QUERY = "get";     //prefix of select queries in mapper files (eg. getAddressType) 
	public static final String PREFIX_INSERT_QUERY = "insert"; //prefix of insert queries in mapper files (eg. insertAddressType)
	public static final String PREFIX_UPDATE_QUERY = "update";  //prefix of update queries in mapper files (eg. updateAddressType)
	public static final String PREFIX_DELETE_QUERY = "delete";  //prefix of delete queries in mapper files (eg. deleteAddressType)
	public static final String PREFIX_LIST_QUERY = "list";  //prefix of delete queries in mapper files (eg. deleteAddressType)

	/** Default Constructor */
	public AbstractGenericMyBatisDao(Class type) {
		this.type = type;
	}
	
	/** Default Constructor */
	public AbstractGenericMyBatisDao(Class type, SqlSessionFactory sf) {
		this.type = type;
		this.sqlSessionFactory = sf;
		if(sf==null)
			log.error("Error: Could not instantiate MyBatisDAO. Loading myBatis sessionFactory failed.");  
	}

	/** Use this method to get a session factory for using in any methods impelmented in child dao classes */
	protected SqlSessionFactory getSessionFactory() {
		return sqlSessionFactory;
	}

	/** 
	 *  Default get by id method. 
	 *  

* Almost all objects in the db will * need this (except mapping tables for multiple joins, which you * probably shouldn't even have as objects in your model, since proper * MyBatis mappings can take care of that). *

* Example: *
* If your DAO object is called CarInfo.java, * the corresponding mapper query id should be: <select id="getCarInfo" ... */ @SuppressWarnings("unchecked") public T get(PK id) throws PersistenceException { SqlSession session = sqlSessionFactory.openSession(); T obj = null; try { String query = this.type.getSimpleName()+NAMESPACE+"."+PREFIX_SELECT_QUERY+this.type.getSimpleName(); //If the object's calls name is AddressType.java, this matches the mapper query id: "namespace.getAddressType" obj = (T)session.selectOne(query,id); } finally { session.close(); } return obj; } /** * Method returns all rows for this object. *

* Example: *
* If your DAO object is called CarInfo.java, * the corresponding mapper query id should be: <select id="getAllCarInfo" ... *

* SQL Executed: select * from [tablename] *

* Notes: *
* Consider overdiding this method in order to handle large numbers of objects * with multiple references. * LAZY LOADING should be enabled in this case, otherwise you might run out of memory (eg. get all UserAccounts if the table has 1,000,000 rows) * look into the aggresiveLazyLoading property * */ @SuppressWarnings("unchecked") public ArrayList getAll() throws PersistenceException { SqlSession session = sqlSessionFactory.openSession(); ArrayList list = null; try { String query = this.type.getSimpleName()+NAMESPACE+"."+PREFIX_SELECT_QUERY+"All"+this.type.getSimpleName(); list = (ArrayList)session.selectList(query); } finally { session.close(); } return list; } /** * Method returns first object which matches the given name (exact match). *

* It's up to you to decide what constitutes an object's name. Typically you would have a * NAME column in the table, but not all objects have this. Generally this method should be overriden (if you need it at all) * in the child dao class. *

* Example: *
* If your DAO object is called CarInfo.java, * the corresponding mapper query id should be: <select id="getCarInfoByName" ... *

* SQL Executed (example): select * from [tablename] where NAME = ? * */ @SuppressWarnings("unchecked") public T getByName(String name) throws PersistenceException { SqlSession session = sqlSessionFactory.openSession(); T obj = null; try { String query = this.type.getSimpleName()+NAMESPACE+"."+PREFIX_SELECT_QUERY+this.type.getSimpleName()+"ByName"; obj = (T)session.selectOne(query, name); } finally { session.close(); } return obj; } /** * Method inserts the object into the table. *

* You will usually override this method, especially if you're inserting associated objects. *
* Example: *
* If your DAO object is called CarInfo.java, * the corresponding mapper query id should be: <insert id="createCarInfo" ... *

* SQL Executed (example): insert into [tablename] (fieldname1,fieldname2,...) values(value1,value2...) ... * */ public int insert(T o) throws PersistenceException{ SqlSession session = sqlSessionFactory.openSession(); Integer status = null; try { String query = this.type.getSimpleName()+NAMESPACE+"."+PREFIX_INSERT_QUERY+o.getClass().getSimpleName(); status = (Integer)session.insert(query, o); session.commit(); } finally { session.close(); } return status; } /** * Method updates the object by id. *

* You will usually override this method. But it can be used for simple objects. *
* Example: *
* If your DAO object is called CarInfo.java, * the corresponding mapper query id should be: <update id="updateCarInfo" ... *

* SQL Executed (example): update [tablename] set fieldname1 = value1 where id = #{id} * */ public int update(T o)throws PersistenceException { SqlSession session = sqlSessionFactory.openSession(); Integer status = null; try { String query = this.type.getSimpleName()+NAMESPACE+"."+PREFIX_UPDATE_QUERY+o.getClass().getSimpleName(); status = session.update(query, o); session.commit(); } finally { session.close(); } return status; } /** * Method deletes the object by id. *

* Example: *
* If your DAO object is called CarInfo.java, * the corresponding mapper query id should be: <delete id="deleteCarInfo" ... *

* SQL Executed (example): update [tablename] set fieldname1 = value1 where id = #{id} * */ public int delete(PK id) throws PersistenceException{ SqlSession session = sqlSessionFactory.openSession(); Integer status = null; try { String query = this.type.getSimpleName()+NAMESPACE+"."+PREFIX_DELETE_QUERY+this.type.getSimpleName(); status = session.delete(query, id); session.commit(); } finally { session.close(); } return status; } }


RoleService.java
package com.openerp.service;

import com.openerp.domain.Role;

public interface RoleService {
	Role getRole(int key);
}


RoleServiceImpl.java
package com.openerp.service.impl;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.openerp.dao.RoleDao;
import com.openerp.domain.Role;
import com.openerp.service.RoleService;

@Service("roleMgr")
public class RoleServiceImpl implements RoleService{
	
	Log logger = LogFactory.getLog(this.getClass());
	
	@Autowired
	private RoleDao dao;

	@Override
	public Role getRole(int key) {
		return dao.get(key);
	}
	
}


Controller
package com.openerp.controller;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.arnx.jsonic.JSONException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.openerp.common.utils.JSONUtil;
import com.openerp.service.RoleService;

@Controller
public class JsonController {

	@Autowired private RoleService roleMgr;
	
	@RequestMapping("/json/sampleData.do")
	public void sendJsonData(HttpServletRequest req, HttpServletResponse rep){
		int key = Integer.parseInt(req.getParameter("key"));
		try {
			rep.setCharacterEncoding("UTF-8");
			rep.getWriter().write(JSONUtil.toJSON(roleMgr.getRole(key), null));
			
		} catch (JSONException e) {
			e.printStackTrace();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


SqlMapConfig.xml



	
		 
	

	
		
	

	



mapUnderscoreToCamelCase 이 속성을 안적어주면 아래 필드가 매핑되지 않는다.
ROLE_NAME_KOR 이런 필드는 카멜 표기법으로 표기하지 않기 때문에 꼭 위의 속성이 필요하다...


SQL File :

Full Source :
설명 적는게 너무 귀찮으다...


기존에 사용하던 Spring 3.1에서 3.2.3으로 변경했다. 하는김에 myBatis도 최신으로 변경.. 
이러다가 그냥 back-end를 다 최신으로 변경하기로 작정하고 작업 진행..

applicationContext.xml 에서 myBatis 설정이 조금 변경되었다. 

org.springframework.orm.ibatis.support.SqlMapClientDaoSupport
as of Spring 3.2, in favor of the native Spring support in the Mybatis follow-up project (http://code.google.com/p/mybatis/)
org.springframework.orm.ibatis.SqlMapClientFactoryBean
as of Spring 3.2, in favor of the native Spring support in the Mybatis follow-up project (http://code.google.com/p/mybatis/)
org.springframework.orm.ibatis.SqlMapClientTemplate
as of Spring 3.2, in favor of the native Spring support in the Mybatis follow-up project (http://code.google.com/p/mybatis/)

3.2 버전 이전은 위 클래스를 이용하여 myBatis 설정을 했지만 3.2 이후부터는 불가능하다.

> myBatis configuration codes in applicationContext
	
	
		
		
		
		
		
			
		
	

심플하다... SqlMapConfig에 mapper를 일일이 적어주어도 되지만
mapperLocations를 이용하여 패키지 검색으로 자동 매핑되게도 할 수 있고 이게 더 편하다.

또 하나, 기본 설정 그대로 사용하고자 한다면 configLocation을 적지 않아도 된다.

아래는 maven에서의 myBatis 설정에 관련된 코드.
	
		
		3.2.2
		1.2.0
		
	

	
		
		
			org.mybatis
			mybatis
			${org.mybatis.version}
		
		
			org.mybatis
			mybatis-spring
			${org.mybatis.spring.version}
		
	




 

 


Spring은 자체 maven Repository가 존재한다. 
이곳에서 라이브러리를 통으로 내려 받을 수 있다. 

site : https://ebr.springsource.com/repository/app/ 
	
		
		    com.springsource.repository.bundles.release
		    SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases
		    http://repository.springsource.com/maven/bundles/release
		
		
		
		    com.springsource.repository.bundles.external
		    SpringSource Enterprise Bundle Repository - External Bundle Releases
		    http://repository.springsource.com/maven/bundles/external
		
		
		
		    com.springsource.repository.libraries.release
		    SpringSource Enterprise Bundle Repository - SpringSource Library Releases
		    http://repository.springsource.com/maven/libraries/release
		
		
		
		    com.springsource.repository.libraries.external
		    SpringSource Enterprise Bundle Repository - External Library Releases
		    http://repository.springsource.com/maven/libraries/external
		
	

	
		
			org.springframework
			org.springframework.spring-library
	    	libd
			3.2.3.RELEASE
			
		        
					javax.servlet
		            com.springsource.javax.servlet
				
			
		
	


junit으로 테스트를 진행하고자 할 경우 아래 의존성도 추가해 주어야 한다.
		
			org.springframework
			org.springframework.test
			3.2.3.RELEASE
		

'Framework > Spring' 카테고리의 다른 글

myBatis DAO Pattern example  (0) 2013.07.19
Spring 3.2.3 + myBatis 3.2.2  (0) 2013.07.19
Spring Framework 3.2.3 Maven으로 한번에 추가하기..  (0) 2013.07.18
Spring 3.2.2 + Tiles 3.0  (0) 2013.05.22
Spring Security 설정.  (2) 2011.08.30
[2011-05-26] Spring Security 설정 오류.  (0) 2011.05.26

Tiles 3.0을 사용하기 위해선 Spring Framework 3.2 이상의 버전이 필요하다.

기존 버전과 비교했을때 설정이 간소화 되었다.

http://dhruvgairola.blogspot.kr/2013/03/spring-mvc-with-apache-tiles-3.html 

'Framework > Spring' 카테고리의 다른 글

Spring 3.2.3 + myBatis 3.2.2  (0) 2013.07.19
Spring Framework 3.2.3 Maven으로 한번에 추가하기..  (0) 2013.07.18
Spring 3.2.2 + Tiles 3.0  (0) 2013.05.22
Spring Security 설정.  (2) 2011.08.30
[2011-05-26] Spring Security 설정 오류.  (0) 2011.05.26
MySQL AutoReconnect 설정.  (0) 2010.07.12
- Spring-security-3.1.0.RC2로 작업.
- 일반적인 Spring 설정은 제외.

web.xml
	
	
		contextConfigLocation
		
			 classpath*:/applicationContext*.xml
		
	
...
...
	
		springSecurityFilterChain
		org.springframework.web.filter.DelegatingFilterProxy
	

	
		springSecurityFilterChain
		/*
	


applicationContext-security.xml



	
	

	
		
		
     	
		
        
		
		
		
		
		
		
		
		
		
		
        
		
		
	
	
		
	
	
	
	
	

	
	
	
	

	
		
        	
	

	
		
		
	

	
		
		
	

	
		
		
		
	
	


MemberManager.java
public interface MemberManager extends UserDetailsService{
	// 구현하고픈 메서드
}

MemberManagerImpl.java
@Service("memberMgr")
public class MemberManagerImpl extends AbstractGenericManager implements MemberManager{

	@Autowired
	// DB와 통신할 DAO
	MemberDao memberDao;
	
	@Override
	// 로그인 메서드
	public Member login(String memberId, String memberPw){
		Member member = (Member) loadUserByUsername(memberId);
		if(member != null){
			if(memberPw.equals(member.getPasswd())) {
				member.setName(member.getAuth().get(0).getAuthority());
				member.setAuthenticated(true);
				return member;
			}
		}
		return null;
	}
		
	@Override
	// UserDetailService 구현체
	public UserDetails loadUserByUsername(String adminId) throws UsernameNotFoundException {
		// Parameters는 커스텀 클래스임.
		Parameters params = new Parameters();
		params.put("p_id", adminId);
		List list = null;
		try{
			// DAO를 통해 쿼리를 날리고 결과를 받아오는 것.
			list = memberDao.list(params);
			// 유저가 없을경우.
			if(list.size() == 0 || list.size() > 1){
				return null;
			}
		}catch(Exception e){
			StringBuilder logMsg = (new StringBuilder("Username(")).append(adminId).append(") access exception!");
			logger.error(logMsg.toString(), e);
            throw new UsernameNotFoundException(logMsg.toString(), e);
		}
		return list.get(0);
	}
	
	
	public Collection getAuthorities(Member member) {
		List authList = new ArrayList();
		Role role = member.getRole();
		authList.add(new SimpleGrantedAuthority(role.getRoleName()));
        return authList;
	}

}

Member와 SecurityObject (인증을 저장하고 있을 JPA Entity)
인증 정보를 가지고 있을 객체는 몇가지 객체를 구현해야하는데 이에 필요한 filed가 존재해야만 한다.
JPA에서는 @Entity가 붙은 클래스는 DB와 동기화를 하기 때문에 DB에 없는 filed를 넣을시 에러가 난다.
때문에 SecurityObject를 만들어서 객체 구현에 필요한 filed를 가지게하고
인증 정보를 가지고 있을 객체가 SecurityObject를 상속하는 방식으로 처리 했다.

SecurityObject.java
public class SecurityObject implements Serializable{

	private static final long serialVersionUID = 8359426924640562032L;
	
	protected boolean accountNonExpired;
	protected boolean accountNonLocked;
	protected boolean credentialsNonExpired;
	protected boolean accepted;
	
	protected String name;
	protected Object credentials;
	protected Object details;
	protected Object principal;
	protected boolean authenticated;

}


인증 정보를 가지고 있을 Member 객체
/**
 * The persistent class for the members database table.
 * 
 */
@Entity
@Table(name="members")
public class Member extends com.score.www.common.domain.SecurityObject implements Serializable, UserDetails, Authentication {
	private static final long serialVersionUID = 1L;

	// 이런 저런 filed, ex) name, id, nickname 등

	//bi-directional many-to-one association to Role
	// ROLE과 Member 는 1:N의 관계로 설정했고 이를 JPA로 구현한 것.
	@ManyToOne
	@JoinColumn(name="ROLE_SEQ")
	private Role role;

	public Member() {
	}

	// 일반 filed의 getter/setter

	public Role getRole() {
		return this.role;
	}

	public void setRole(Role role) {
		this.role = role;
	}
	
	@Override
	public Object getCredentials() {
		return credentials;
	}

	@Override
	public Object getDetails() {
		return details;
	}

	@Override
	public Object getPrincipal() {
		return principal;
	}
	
	public void setPrincipal(Object principal){
		this.principal = principal;
	}

	@Override
	public boolean isAuthenticated() {
		return authenticated;
	}

	@Override
	public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
		this.authenticated = isAuthenticated;
	}

	@SuppressWarnings("unchecked")
	public List getAuth(){
		return (List) this.getAuthorities();
	}
	
	@Override
	public Collection getAuthorities() {
		List list = new ArrayList();
		list.add(new SimpleGrantedAuthority(role.getRoleName()));
		return list;
	}

	@Override
	public String getPassword() {
		return this.passwd;
	}

	@Override
	public String getUsername() {
		return this.memberName;
	}

	@Override
	public boolean isAccountNonExpired() {
		return accountNonExpired;
	}

	@Override
	public boolean isAccountNonLocked() {
		return accountNonLocked;
	}

	@Override
	public boolean isCredentialsNonExpired() {
		return credentialsNonExpired;
	}

	@Override
	public boolean isEnabled() {
		return super.accepted;
	}

	@Override
	public String getName() {
		return this.name;
	}

	public void setName(String authority) {
		this.name = authority;
	}
	
}


 

'Framework > Spring' 카테고리의 다른 글

Spring 3.2.3 + myBatis 3.2.2  (0) 2013.07.19
Spring Framework 3.2.3 Maven으로 한번에 추가하기..  (0) 2013.07.18
Spring 3.2.2 + Tiles 3.0  (0) 2013.05.22
Spring Security 설정.  (2) 2011.08.30
[2011-05-26] Spring Security 설정 오류.  (0) 2011.05.26
MySQL AutoReconnect 설정.  (0) 2010.07.12
  1. 개발자 2014.09.30 10:54 신고

    이해와 연결이 잘 안되는 부분이 있는데 질문 드려도 될까요?
    MemberManagerImpl 에서 login 메소드는 어디서 호출이 되는건가요??
    Spring의 UserDetailsService 에는 없는 메소드인데, authenticationManager에 설정했다고 해도 이 메소드가 어떻게 호출이 되고 어떻게 로그인 처리가 되는지 잘 이해가 안되네요...
    설명좀 부탁드려도 될까요?
    그리고 AbstractGenericManager 이 녀석도 제가 갖고 있는 라이브러리 (Spring Security 3.2.4) 에는 안나오던데, 이건 어디에 포함된 클래스인가요?

    • jYeory 2015.04.08 14:01 신고

      회사에서 티스토리 접근이 안돼서 이제 봤네요.
      2011년에 사용했던 코드는 원래 사용하는 방법에서 많이 가다듬어 사용한 거라 문서에 없는 것도 몇 개 있습니다.
      현재는 유지보수 쉽게 문서에 있는 그대로 사용하고 있구요.
      늦게나마 댓글 답니다.

Spring Security 3.1.0.RC2는 최소 Spring 3.0.5 and Java 5가 무조건 필요하다.
Spring Security 3..0.5 는 최소 Spring 3.0.3 and Java 5가 무조건 필요하다. 

위 두개를 간과하고 설정하다가 하루종일 삽질만 해댔다. 
 
sec 버전은 3.1인데 프로젝트 Spring 버전은 3.0.2 requirement 조차 맞추지 못하고 급하게 시작한 결과는 삽질. 




필요 버전으로 업데이트 하고 다시 설정하니 오류가 안난다. 

'Framework > Spring' 카테고리의 다른 글

Spring 3.2.3 + myBatis 3.2.2  (0) 2013.07.19
Spring Framework 3.2.3 Maven으로 한번에 추가하기..  (0) 2013.07.18
Spring 3.2.2 + Tiles 3.0  (0) 2013.05.22
Spring Security 설정.  (2) 2011.08.30
[2011-05-26] Spring Security 설정 오류.  (0) 2011.05.26
MySQL AutoReconnect 설정.  (0) 2010.07.12

+ Recent posts