⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s3oclientmodel.java

📁 单点登陆
💻 JAVA
字号:
package net.s3o.client;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

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

import net.s3o.client.cache.ClientCacheManager;
import net.s3o.common.S3OConstant;
import net.s3o.common.S3OLog;
import net.s3o.common.S3OUtils;
import net.s3o.common.UserInfoWrapper;
import net.s3o.core.IAuthorizationModel;
import net.s3o.core.S3OCoreModel;

public class S3OClientModel extends S3OCoreModel {
	
	
	
	private String loginAction=null;
	
	private String logoutAction=null;
	
	private String loginPage=null;
	
	private String sucessedPage=null;
	
	private String failedPage=null;
	
	private IAuthorizationModel authorizationModel=null;
	

	
	public boolean mainFunction(HttpServletRequest request, HttpServletResponse response) throws ServletException {
		boolean breakChain=false;
		
		HttpSession session=request.getSession(true);
		String webPath=request.getContextPath();
		
		try {
	        if (isServiceRequest(request,response)){
	        	invokeService(request, response);
	        	breakChain=true;

	        }else if (isServerMethodRequest(request, response)){
	        	invokeServerMethod(request,response);
	        	breakChain=true;
	        	
	        }else{
		        	
		        if (passURL(request)){
		        	  breakChain=false;
		        	  return breakChain;
		        }
	        
		        if (isLogoutAction(request)){
		        	doLogoutById(session);
		        	  breakChain=false;
		        	  return breakChain;
		        }
		    
		        if (isLoginAction(request)){
		        	//if (S3OUtil.hasLogin(request)){
		        	doLogoutById(session);
		        	//}
		            String userId=request.getParameter(S3OConstant.NAME_OF_USER_ID_FIELD);
		            String userPassword=request.getParameter(S3OConstant.NAME_OF_USER_PASSWORD_FIELD);	
		        	if (doLoginById(request, response, userId, userPassword) ){
			        	  breakChain=true;
			        	  return breakChain;
		        	}
		        }
	
		        if (S3OUtils.hasLogin(request)){
		        	S3OLog.dealMessage(webPath, " === 无需再次验证..."+S3OUtils.getUserIDFromSession(session));
		        	  breakChain=false;
		        	  return breakChain;
		        }
		        

		        String ticketKey=doLookupTicketKey(request,response);
		    	if (ticketKey!=null && !S3OConstant.TICKET_INVALID.equalsIgnoreCase(ticketKey) ){
		    			if (!doLookupUserInfoByTicketKey(request,response,ticketKey)){
				        	  S3OUtils.sendRedirect(request, response,loginPage);
				        	  breakChain=true;
		    			}else{
				        	  breakChain=false;
				        	 
		    			}
		    			 return breakChain;
		    	}else if(S3OConstant.TICKET_INVALID.equalsIgnoreCase(ticketKey)){
		        	  S3OUtils.sendRedirect(request, response,loginPage);
		        	  breakChain=true;
		        	  return breakChain;
		    	}else{
		        	  breakChain=true;
		        	  return breakChain;
		    	}
	        	
	        }
	        	
        
		}catch(Exception e){
			e.printStackTrace();
			breakChain=true;
			throw new ServletException(e);
		}
        return breakChain;
        
	}
	


    private String doLookupTicketKey(HttpServletRequest request, HttpServletResponse response) throws IOException{
    	String ticket=null;
    	ticket=request.getParameter(S3OConstant.FIELD_TICKETKEY);
    	if (S3OUtils.isEmpty(ticket)){
    		HashMap map=new HashMap();
    		map.put(S3OConstant.FIELD_TARGET_URL, S3OUtils.getFullURL(request,S3OUtils.getFullRequestURI(request)) );
    		callServerMethod(request,response,S3OConstant.METHODNAME_OF_LOOKUPTICKETKEY,S3OUtils.getQueryStringFromMap(map));
    		return null;
    	}
    	return ticket;
    }
    
    /**
     * @param request
     * @param response
     * @param ticketKey
     * @return 是否成功登录
     * @throws IOException
     * @throws ServletException
     */
    private boolean doLookupUserInfoByTicketKey(HttpServletRequest request, HttpServletResponse response, String ticketKey) throws IOException, ServletException{
		boolean isLoginOK=false;

       	Map userInfoMap=(Map)(callRemoteServiceByName(S3OConstant.SERVICENAME_OF_LOOKUP_S, ticketKey));
       	UserInfoWrapper userInfo=null;
       	 if (userInfoMap!=null){
       		userInfo = new UserInfoWrapper(userInfoMap);
//       		ticket=userInfo.getTicket();
	        String userId = (String)userInfo.getPrincipal();
	        String userPassword = (String)userInfo.getCredentials();
	        	try {
//					isLoginOK=doLoginByID(request,response,userId, userPassword);
	        		isLoginOK=authorizationModel.doLogin(userId, userPassword, request, response);
	        		HttpSession session =request.getSession(true);
	        		if (isLoginOK==true){
//	        			userInfo.setTicket(ticketKey);
	        			session.setAttribute(S3OConstant.KEY_OF_SESSION_USERINFO, userInfo);
	        			ClientCacheManager.setUserInfo((Map)userInfo.getDetails());
//	        			doInitServerCookie(request,response,ticket,S3OUtil.getFullRequestURI(request));
	        		}else{
	        			session.setAttribute(S3OConstant.KEY_OF_SESSION_USERINFO, null);
	        			ClientCacheManager.removeUserInfoByUserId(userId);
	        		}
				} catch (Exception e) {
					isLoginOK=false;
				}
       	 }
       	 if(!isLoginOK){
       		doLogoutById(request.getSession(true));
       	 }

		return isLoginOK;
    }
    
    
   

    
    private boolean isLogoutAction(HttpServletRequest request){
    	String webPath=request.getContextPath();
    	return request.getRequestURI().indexOf(webPath+logoutAction)==0;
    }
    
    
    
    /**
     * @param session
     * @param ticket
     * @return 是否成功注销
     * @throws IOException
     */
    private boolean doLogoutById(HttpSession session) throws IOException{

    	String userId=S3OUtils.getUserIdFromSession(session);
    	session.setAttribute(S3OConstant.KEY_OF_SESSION_USERINFO, null);
    	if (S3OUtils.isEmpty(userId)){
    		return false;
    	}
    	try {
    		if ( ((Boolean)callRemoteServiceByName(S3OConstant.SERVICENAME_OF_LOGOUT_S, userId)).booleanValue() ){
    			return true;
    		}
		} catch (Exception e) {
			return false;
		}
    	return false;
    }
    
    
    /**
     * @param request
     * @param response
     * @param userId
     * @param userPassword
     * @return 是否成功登录
     * @throws IOException
     * @throws ServletException
     */
    private boolean doLoginById(HttpServletRequest request, HttpServletResponse response, String userId,String userPassword) throws IOException, ServletException{
        	boolean isLoginOK=false;
        	try {
				isLoginOK=authorizationModel.doLogin(userId, userPassword, request, response);
			} catch (Exception e) {
				isLoginOK=false;
			}
			HttpSession session =request.getSession(true);
			if (isLoginOK==true){
				UserInfoWrapper userInfo=new UserInfoWrapper();
				userInfo.setPrincipal(userId);
				userInfo.setCredentials(userPassword);
				userInfo.setUserIp(request.getRemoteAddr());
				userInfo.setUserSessionId(session.getId());
				String ticketKey=(String)(callRemoteServiceByName(S3OConstant.SERVICENAME_OF_LOGIN_S, userInfo.getDetails()));
				userInfo=S3OUtils.createUserInfo(userId, userPassword, request);
				session.setAttribute(S3OConstant.KEY_OF_SESSION_USERINFO, userInfo);
				ClientCacheManager.setUserInfo((Map)userInfo.getDetails());
				doInitServerCookie(request,response,ticketKey,sucessedPage+S3OUtils.getQueryString(request));
			}else{
				session.setAttribute(S3OConstant.KEY_OF_SESSION_USERINFO, null);
				ClientCacheManager.removeUserInfoByUserId(userId);
			}
        
    	return isLoginOK;
    	
    }
    
    

    private void doInitServerCookie(HttpServletRequest request, HttpServletResponse response,String ticketKey,String returnUrl) throws IOException{
		HashMap map=new HashMap();
		map.put(S3OConstant.FIELD_TICKETKEY, ticketKey);
		map.put(S3OConstant.FIELD_TARGET_URL, S3OUtils.getFullURL(request,returnUrl ));
		callServerMethod(request,response,S3OConstant.METHODNAME_OF_INITCOOKIE,S3OUtils.getQueryStringFromMap(map));
    }
    
    
    
    
	public boolean passURL(HttpServletRequest request){
		String webPath=request.getContextPath();
		String rurl=request.getRequestURI();
		
		String passURLPattern=getPassURL();
		boolean isPass=false;
		
		isPass=rurl.indexOf(webPath+loginPage)==0 || rurl.indexOf(webPath+failedPage)==0;
		if (!S3OUtils.isEmpty(passURLPattern) && !isPass){
			String[] passURLs=passURLPattern.split(";");
			for (int i=0;i<passURLs.length;i++){
				isPass=pathMatcher.match(passURLs[i], rurl);
				if (isPass){
					break;
				}
			}
			
		}
		return isPass;
	}
	

    
    private boolean isLoginAction(HttpServletRequest request){
    	String webPath=request.getContextPath();
    	return request.getMethod().equalsIgnoreCase("POST") && request.getRequestURI().indexOf(webPath+loginAction)==0;
    }
    




	public IAuthorizationModel getAuthorizationModel() {
		return authorizationModel;
	}



	public void setAuthorizationModel(IAuthorizationModel authorizationModel) {
		this.authorizationModel = authorizationModel;
	}


	

	public boolean afterChain(HttpServletRequest request, HttpServletResponse response) throws ServletException {
		// TODO Auto-generated method stub
		return false;
	}


	public String getFailedPage() {
		return failedPage;
	}



	public void setFailedPage(String failedPage) {
		this.failedPage = failedPage;
	}



	public String getLoginAction() {
		return loginAction;
	}



	public void setLoginAction(String loginAction) {
		this.loginAction = loginAction;
	}



	public String getLoginPage() {
		return loginPage;
	}



	public void setLoginPage(String loginPage) {
		this.loginPage = loginPage;
	}



	public String getLogoutAction() {
		return logoutAction;
	}



	public void setLogoutAction(String logoutAction) {
		this.logoutAction = logoutAction;
	}



	public String getSucessedPage() {
		return sucessedPage;
	}



	public void setSucessedPage(String sucessedPage) {
		this.sucessedPage = sucessedPage;
	}



	public void afterPropertiesSet() throws Exception {
		// TODO Auto-generated method stub
		
	}
	



}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -