📄 s3oclientmodel.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 + -