📄 gsession.java
字号:
package jp.co.sjts.gsession.main;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.io.File;
import java.util.Hashtable;
import java.util.HashSet;
import java.util.List;
import java.util.Iterator;
import java.net.URL;
import java.net.MalformedURLException;
import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import jp.co.sjts.gsession.tools.*;
import jp.co.sjts.gsession.tools.mail.*;
/**
* <p>GSession 偺儊僀儞
*
* @author Satoru Konishi
* @author Hideyuki KITADE <kitade@sjts.co.jp>
*/
public class GSession extends MainBaseServlet {
/** 儊僀儞愝掕僼傽僀儖 */
private MainConfFile conf=null;
/** 儐乕僓儅僱乕僕儍乕 */
private UserManager usermanager = null;
/**
* <p>弶婜壔張棟
*/
public void init() throws ServletException {
super.init();
try{
// 婎杮愝掕僼傽僀儖庢摼
conf = new MainConfFile(getRootDir());
conf.Load();
// 儐乕僓娭學偺僼傽僀儖庢摼
usermanager = new UserManager(getRootDir());
usermanager.Load();
} catch (Exception e) {
// getServletContext().log(e, "err");
throw new ServletException(e.toString());
}
}
/**
* <p>僒乕僽儗僢僩廔椆帪偵屇傃弌偝傟傑偡丅
*/
public void destroy() {
super.destroy();
}
/**
* <p>GET儕僋僄僗僩張棟
*
* @param hsPara 擔杮岅張棟嵪傒僷儔儊乕僞
* @param req 儕僋僄僗僩
* @param res 儗僗億儞僗
*/
public void GSdoGet(Hashtable hsPara,HttpServletRequest req,HttpServletResponse res)
throws ServletException, IOException {
try {
// 僙僢僔儑儞忣曬庢摼
HttpSession session = req.getSession(false);
// 僷儔儊乕僞側偟
if(hsPara == null){
if(session != null) {
hsPara = __createMainHash(req);
} else {
String[] value = new String[1];
hsPara = new Hashtable();
value[0] = Integer.toString(GSCmd.GS_LOGIN);
hsPara.put(GSCmd.GS_PARA_CMD,value);
}
} else if(session == null) {
if( (hsPara.size()==1)&&(hsPara.get(GSCmd.GS_PARA_USER)!=null) ) {
String[] value = new String[1];
value[0] = Integer.toString(GSCmd.GS_LOGIN);
hsPara.put(GSCmd.GS_PARA_CMD,value);
} else {
int cmd = (hsPara.get(GSCmd.GS_PARA_CMD)!=null)?
Integer.parseInt(((String[])hsPara.get(GSCmd.GS_PARA_CMD))[0]) : -1;
if((cmd!=GSCmd.GS_LOGIN)&&(cmd!=GSCmd.GS_LOGOUT)) {
CreateErrorPage page = new CreateErrorPage(
CreateErrorPage.ERR_SESSION, getMapURL(),
GSTool.removeParaFormURI(req.getRequestURI())+"?"
+GSCmd.GS_PARA_CMD+"="+GSCmd.GS_LOGIN);
page.setTarget("_top");
page.write(req,res);
return;
}
}
} else {
if( (hsPara.size()==1)&&(hsPara.get(GSCmd.GS_PARA_USER)!=null) )
hsPara = __createMainHash(req);
SessionUpdate(session);
}
Dispatch(hsPara,req,res);
} catch(Exception e) {
log("GSession::GSdoPost",e);
unKnownError(req,res);
}
}
/**
* <p>POST儕僋僄僗僩張棟
*
* @param hsPara 擔杮岅張棟嵪傒僷儔儊乕僞
* @param req 儕僋僄僗僩
* @param res 儗僗億儞僗
*/
public void GSdoPost(Hashtable hsPara,HttpServletRequest req,HttpServletResponse res)
throws ServletException, IOException {
try {
int cmd = 0;
HttpSession session = req.getSession(false);
// 僷儔儊乕僞側偟偺帪偼MAIN儁乕僕偲偡傞
if(hsPara == null) {
hsPara = __createMainHash(req);
}
cmd = Integer.parseInt((String)((String[])hsPara.get(GSCmd.GS_PARA_CMD))[0]);
if(cmd == GSCmd.GS_LOGINCHK) {
String user = (String)((String[])hsPara.get(GSCmd.GS_PARA_USER))[0];
String pass = (String)((String[])hsPara.get(GSCmd.GS_PARA_PASS))[0];
int uid = usermanager.canLogin(user,pass);
if(uid >= 0) { // 儘僌僀儞惉岟
session = req.getSession(true);
synchronized(conf) {
session.setMaxInactiveInterval(conf.GetSessionTime());
}
session.setAttribute(GSBase.SESSION_PARA_UID, new Integer(uid));
session.setAttribute(GSBase.SESSION_LAST_LOGIN,usermanager.getLastLoginTime(uid));
session.setAttribute(GSBase.SESSION_USERMNG,usermanager);
SessionUpdate(session);
GSDate date = new GSDate();
usermanager.setLastLoginTime(uid,date.getYMDHMS());
//儊僀儞儁乕僕傊
hsPara = __createMainHash(req);
} else { // 儐乕僓乕幆暿僄儔乕
CreateErrorPage page = new CreateErrorPage(
CreateErrorPage.ERR_AUTH, getMapURL(),
GSTool.removeParaFormURI(req.getRequestURI())+"?"
+GSCmd.GS_PARA_CMD+"="+GSCmd.GS_LOGIN);
page.write(req,res);
return;
}
}
// Session僠僃僢僋
if(session == null) {
if(cmd != GSCmd.GS_LOGIN) {
CreateErrorPage page = new CreateErrorPage(
CreateErrorPage.ERR_SESSION, getMapURL(),
GSTool.removeParaFormURI(req.getRequestURI())+"?"
+GSCmd.GS_PARA_CMD+"="+GSCmd.GS_LOGIN);
page.write(req,res);
return;
}
} else {
SessionUpdate(session);
}
Dispatch(hsPara,req,res);
} catch(Exception e) {
log("GSession::GSdoPost",e);
unKnownError(req,res);
}
}
/**
* <p>僙僢僔儑儞忣曬傪峏怴
*
* @param session 僙僢僔儑儞僆僽僕僃僋僩
*/
private void SessionUpdate(HttpSession session) {
Integer i = (Integer)session.getAttribute(GSBase.SESSION_PARA_UID);
int uid = i.intValue();
synchronized(conf) {
session.setMaxInactiveInterval(conf.GetSessionTime());
}
session.setAttribute(GSBase.SESSION_PARA_UNAME,usermanager.getUName(uid));
}
/**
* <p>
*
* @param req 儕僋僄僗僩
*/
private Hashtable __createMainHash(HttpServletRequest req) {
Hashtable hsPara = new Hashtable();
String url = GSTool.removeParaFormURI(req.getRequestURI())+"?"
+GSCmd.GS_PARA_CMD+"="+GSCmd.GS_MAIN;
String[] value = {Integer.toString(GSCmd.GS_FRAMESET)};
String[] idx = {"1"};
String[] bodyUrl = {url};
String[] title = {"儊僀儞"};
hsPara.put(GSCmd.GS_PARA_CMD,value);
hsPara.put(GSCmd.GS_PARA_IDX,idx);
hsPara.put(GSCmd.GS_PARA_BODYURL,bodyUrl);
hsPara.put(GSCmd.GS_PARA_TITLE,title);
return hsPara;
}
/**
* <p>僒乕僽儗僢僩忣曬
*/
public String getServletInfo() {
return GSBase.GS_VERSION;
}
/**
* <p>奺儁乕僕傪嶌惉
*
* @param hsPara 擔杮岅張棟嵪傒僷儔儊乕僞
* @param req 儕僋僄僗僩
* @param res 儗僗億儞僗
*/
private void Dispatch(Hashtable hsPara,HttpServletRequest req,HttpServletResponse res)
throws GSException {
int cmd = Integer.parseInt((String)((String[])hsPara.get(GSCmd.GS_PARA_CMD))[0]);
CreatePage page=null;
String[] buf,buf2;
HttpSession session = req.getSession(false);
int sessionUID = (session!=null) ?
((Integer)session.getAttribute(GSBase.SESSION_PARA_UID)).intValue()
: -1;
switch(cmd) {
case GSCmd.GS_LOGINCHK://儘僌僀儞僠僃僢僋
break;
case GSCmd.GS_LOGOUT:{
if(session!=null)
session.invalidate();
}
case GSCmd.GS_LOGIN:{//儘僌僀儞儁乕僕
page = new CreateLoginPage(hsPara,getMapURL());
break;
}
case GSCmd.GS_FRAMESET:{//嫟捠僼儗乕儉僙僢僩儁乕僕
page = new CreateFramesetPage(hsPara);
break;
}
case GSCmd.GS_TOOLBAR:{// 僣乕儖僶乕
page = new CreateToolbarPage(hsPara,conf.GetModList(),getMapURL(),
GSTool.removeParaFormURI(req.getRequestURI()));
break;
}
case GSCmd.GS_MAIN:{// 儊僀儞儃僨傿乕
GSDate toDay = new GSDate();
page = new CreateMainBodyPage(getRootDir(),conf.GetModList(),getMainURL(),getMapURL(),getHelpURL()
,getHoliday(toDay.getstrYear()));
break;
}
case GSCmd.GS_PERSONAL:{// 屄恖愝掕
page = new CreatePersonalPage(hsPara,getRootDir(),getMapURL(),usermanager,getHelpURL());
break;
}
case GSCmd.GS_CHANG_PASS:{//屄恖僷僗儚乕僪曄峏
page = new CreatePsPassEditPage(hsPara,getRootDir(),getMapURL(),usermanager,getHelpURL());
break;
}
case GSCmd.GS_P_SET_BASE:{// 屄恖婎杮愝掕
page = new CreatePsSetBasePage(hsPara,getRootDir(),getMapURL(),getHelpURL());
break;
}
case GSCmd.GS_P_INFO_DEIT:{//屄恖忣曬曇廤
if(sessionUID>0) {
page = new CreatePsUserEditPage(hsPara,getRootDir(),getMapURL(),usermanager,getHelpURL());
} else {
page = new CreateErrorPage("娗棟幰偼巊梡偱偒傑偣傫丅",getMapURL(),null);
}
break;
}
case GSCmd.GS_ADMINTOOL:{// 娗棟幰僣乕儖
if(!superUserCheck(sessionUID,req,res,
getMainURL()+"?"+GSCmd.GS_PARA_CMD+"="+GSCmd.GS_MAIN))
return;
page = new CreateAdminToolPage(getMapURL(),getHelpURL());
break;
}
case GSCmd.GS_AD_SET_BASE:{// 娗棟幰婎杮愝掕
if(!superUserCheck(sessionUID,req,res,
getMainURL()+"?"+GSCmd.GS_PARA_CMD+"="+GSCmd.GS_MAIN))
return;
buf = (String[])hsPara.get(GSCmd.GS_PARA_INSERTX);
// 婡擻捛壛夋柺傊
if(buf!=null) { page = new CreateModAddPage(getMapURL(),getHelpURL()); break; }
buf = (String[])hsPara.get(GSCmd.GS_PARA_EDITX);
// 婡擻曇廤夋柺傊
if(buf!=null) { page = new CreateModEditPage(hsPara,getMapURL(),conf,getHelpURL()); break; }
buf = (String[])hsPara.get(GSCmd.GS_PARA_DELETEX);
// 婡擻嶍彍夋柺傊
if(buf!=null) { page = new CreateModDelPage(hsPara,getMapURL(),conf); break; }
page = new CreateAdminSetBasePage(hsPara,getMapURL(),conf,getHelpURL());
break;
}
case GSCmd.GS_GRUP_MNG:{ // 僌儖乕僾儅僱僕儍乕
if(!superUserCheck(sessionUID,req,res,
getRootDir()+"?"+GSCmd.GS_PARA_CMD+"="+GSCmd.GS_MAIN))
return;
// 僌儖乕僾捛壛夋柺傊
if(hsPara.get(GSCmd.GS_PARA_INSERTX)!=null) {
page = new CreateGroupAddPage(getMapURL(),getHelpURL());
break;
}
int num=-1;
if((buf=(String[])hsPara.get(GSCmd.GS_PARA_GID))!=null)
num = Integer.parseInt(buf[0]);
// 僌儖乕僾曇廤夋柺傊
if( (hsPara.get(GSCmd.GS_PARA_EDITX)!=null)&&(num>0)||
(hsPara.get(GSCmd.GS_PARA_RIGHTX)!=null)&&(num>0)||
(hsPara.get(GSCmd.GS_PARA_LEFTX)!=null)&&(num>0)) {
page = new CreateGroupEditPage(hsPara,usermanager,getRootDir(),getMapURL(),num,getHelpURL());
break;
}
// 僌儖乕僾嶍彍夋柺傊
if( (hsPara.get(GSCmd.GS_PARA_DELETEX)!=null)&&(num>0) ) {
page = new CreateGroupDelPage(hsPara,getMapURL(),usermanager);
break;
}
// 僌儖乕僾儕僗僩夋柺傊
if( (hsPara.get(GSCmd.GS_PARA_GLISTX)!=null)&&(num>0) ) {
page = new CreateGroupListPage(hsPara,getRootDir(),usermanager,getMapURL(),getHelpURL());
break;
}
page = new CreateGroupMngPage(hsPara,usermanager,getRootDir(),getMapURL(),getHelpURL());
break;
}
case GSCmd.GS_USER_MNG:{ // 儐乕僓儅僱僕儍乕
if(!superUserCheck(sessionUID,req,res,
getMainURL()+"?"+GSCmd.GS_PARA_CMD+"="+GSCmd.GS_MAIN))
return;
// 幨恀偺弌椡
if(hsPara.get(CreateUserAddPage.CMD_TEMPMAPX)!=null) {
Integer i=(Integer)req.getSession(false).getAttribute(GSBase.SESSION_PARA_UID);
TempUserFile uf = new TempUserFile(getRootDir()+GSFilename.GS_DIR_USER
+File.separator+i.toString());
GSGifDownLoad gifdf=new GSGifDownLoad(uf.getShashinGifFilePath(),"shashin.gif");
gifdf.write(res);
return;
}
int subcmd=-1;
if((buf=(String[])hsPara.get(GSCmd.GS_PARA_SUBCMD))!=null)
subcmd = Integer.parseInt(buf[0]);
// 儐乕僓捛壛夋柺傊
if( (hsPara.get(GSCmd.GS_PARA_INSERTX)!=null)||
((hsPara.get(GSCmd.GS_PARA_RIGHTX)!=null)&&(subcmd==GSCmd.SUB_ADD_USER))||
((hsPara.get(GSCmd.GS_PARA_LEFTX)!=null)&&(subcmd==GSCmd.SUB_ADD_USER)) ) {
page = new CreateUserAddPage(hsPara,getRootDir(),usermanager,getMapURL(),getHelpURL());
break;
}
int uid=-1;
if((buf=(String[])hsPara.get(GSCmd.GS_PARA_UID))!=null)
uid = Integer.parseInt(buf[0]);
// 儐乕僓曇廤夋柺傊
if( ((hsPara.get(GSCmd.GS_PARA_EDITX)!=null)&&(uid>0)) ||
((hsPara.get(GSCmd.GS_PARA_RIGHTX)!=null)&&(subcmd==GSCmd.SUB_EDIT_USER)&&(uid>0))||
((hsPara.get(GSCmd.GS_PARA_LEFTX)!=null)&&(subcmd==GSCmd.SUB_EDIT_USER)&&(uid>0)) ||
((hsPara.get(GSCmd.GS_PARA_DELETEX)!=null)&&(subcmd==GSCmd.SUB_EDIT_USER)&&(uid>0)) ) {
page = new CreateUserEditPage(hsPara,getRootDir(),usermanager,getMapURL(),getHelpURL());
break;
}
// 儐乕僓嶍彍夋柺傊
if( (hsPara.get(GSCmd.GS_PARA_DELETEX)!=null)&&(uid>0) ) {
page = new CreateUserDelPage(hsPara,getMapURL(),usermanager);
break;
}
page = new CreateUserMngPage(hsPara,getRootDir(),usermanager,getMapURL(),getHelpURL());
break;
}
case GSCmd.GS_LASTLOG:{ // 嵟廔儘僌僀儞帪娫堦棗
if(!superUserCheck(sessionUID,req,res,
getMainURL()+"?"+GSCmd.GS_PARA_CMD+"="+GSCmd.GS_MAIN))
return;
page = new CreateLastlog(hsPara,getMapURL(),usermanager);
break;
}
case GSCmd.GS_HDAY:{ //媥擔愝掕
if(!superUserCheck(sessionUID,req,res,
getMainURL()+"?"+GSCmd.GS_PARA_CMD+"="+GSCmd.GS_MAIN))
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -