package com.connsec.authentication;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import com.connsec.domain.Authentication;
import com.connsec.domain.UserInfo;
import com.connsec.domain.UsernamePasswordAuthenticationToken;
import com.connsec.util.DBUtil;
import com.connsec.web.WebConstants;
import com.connsec.web.WebSignConfig;
public class JdbcAuthenticationProvider extends AbstractAuthenticationProvider{
final static Logger logger = Logger.getLogger(JdbcAuthenticationProvider.class);
@Override
public Authentication doAuthentication(Authentication authentication) {
UsernamePasswordAuthenticationToken authenticationToken=(UsernamePasswordAuthenticationToken)authentication;
UserInfo userInfo=null;
try {
DBUtil dbUtil=new DBUtil(
WebSignConfig.getInstance().get("config.datasource.url"),
WebSignConfig.getInstance().get("config.datasource.username"),
WebSignConfig.getInstance().get("config.datasource.password"),
WebSignConfig.getInstance().get("config.datasource.driverclass"));
Connection conn =dbUtil.createConnection();
String queryUserInfoSql=WebSignConfig.getInstance().get("config.query.userinfo.sql");
PreparedStatement pstmt=conn.prepareStatement(queryUserInfoSql);
pstmt.setString(1, authenticationToken.getPrincipal());
logger.debug("Query UserInfo Sql : "+queryUserInfoSql);
logger.debug("Parameter : "+authenticationToken.getPrincipal());
ResultSet resultSet =pstmt.executeQuery();
while(resultSet.next()){
userInfo =new UserInfo(resultSet.getString(1),resultSet.getString(2));
}
dbUtil.releaseConnection();
} catch (SQLException e) {
e.printStackTrace();
}
//no find user
if(userInfo==null){
authentication.getRequest().getSession().setAttribute(WebConstants.SIGN_IN_ERROR, 3);
return null;
}
//password error
if(!userInfo.getCredential().equals(authenticationToken.getCredentials())){
authentication.getRequest().getSession().setAttribute(WebConstants.SIGN_IN_ERROR, 4);
return null;
}
//login success
return new UsernamePasswordAuthenticationToken(authenticationToken.getPrincipal(),authenticationToken.getCredentials());
}
}