package com.udapsoft.waf.system.context; import java.util.Enumeration; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import kr.co.hsnc.common.util.ValueObject; import kr.co.hsnc.j2ee.waf.controller.web.context.AbstractSessionContext; import kr.co.hsnc.j2ee.waf.controller.web.util.WebKeys; import com.udapsoft.waf.system.HandlerStorage; import com.udapsoft.waf.system.ParameterParser; public class SessionContext extends AbstractSessionContext { private static final long serialVersionUID = 2397955132580073793L; private HttpServletRequest request; /** * 초기화 */ public void init(HttpServletRequest request, HttpServletResponse response) { super.init(request, response); this.request = request; /** * 브라우저 Cache Expire 시키기 */ if (request.getProtocol().compareTo("HTTP/1.0") == 0) { response.setHeader("Pragma", "no-cache"); } else if (request.getProtocol().compareTo("HTTP/1.1") == 0) { response.setHeader("Cache-Control", "no-cache"); } response.setDateHeader("Expires", 0); } /** * 요청에 대한 처리를 한다. */ public void processRequest(HttpServletRequest request, HttpServletResponse response) { } /** * 사용자의 로그인 여부를 리턴한다. * * @return 로그인 여부 */ public boolean isSignedOn() { ValueObject user = getUser(); if (user != null && user.size() < 1) { return false; } else { return true; } } /** * 세션에 로그인 사용자의 정보를 저장한다. */ public void setUser(ValueObject user) { bind("USER", user); } /** * 세션에 저장해둔 로그인 사용자의 정보를 얻어온다. */ public ValueObject getUser() { ValueObject user = (ValueObject) lookup(WebKeys.SIGNED_ON_USER); if (user == null) { user = new ValueObject(); } return user; } /** * request에 담겨온 파라메터를 얻는다. * * @return ValueObject */ public ValueObject getParams() { return getParams(false); } /** * request에 담겨온 파라메터를 얻는다. * * @return ValueObject */ public ValueObject getParams(boolean isCaseSensitive) { ParameterParser parameterParser = new ParameterParser(this.request); return parameterParser.getParams(); } /** * request URL에 담겨온 파라메터 문자열을 리턴한다. URL에 파라메터가 없다면 ""을 리턴한다. * * @return 파라메터 문자열 */ public String getQueryString() { StringBuffer query = new StringBuffer(); Enumeration enu = getRequest().getParameterNames(); String key = null; while (enu.hasMoreElements()) { key = (String) enu.nextElement(); query.append(key).append("=") .append(getRequest().getParameter(key)).append("&"); } if (query.length() > 0) { query.setLength(query.length() - 1); return "?" + query.toString(); } else { return ""; } } /** * Store a message in this Session */ public void setMessage(String message) { bind(WebKeys.MESSAGE, message); } /** * Returns the value of the named attribute(MESSAGE) as a String */ public String getMessage() { String message = (String) lookup(WebKeys.MESSAGE); if (message == null) { message = ""; } else { unbind(WebKeys.MESSAGE); } return message; } /** * Store a message in this Session */ public void setMessageCode(String code) { bind(WebKeys.MESSAGE_CODE, code); } /** * Returns the value of the named attribute(MESSAGE) as a String */ public String getMessageCode() { String code = (String) lookup(WebKeys.MESSAGE_CODE); if (code == null) { code = ""; } else { unbind(WebKeys.MESSAGE_CODE); } return code; } /** * Biz단에서 처리한 HandlerStorage를 리턴한다. * * @return */ public HandlerStorage getHandlerStorage() { String storageKey = (String) this.request.getAttribute(HandlerStorage.KEY); HandlerStorage storage = (HandlerStorage) getAttribute(storageKey); return storage; // return (HandlerStorage)getAttribute(HandlerStorage.KEY); } /** * Screen Name을 리턴한다. * * @return */ public String getScreenName() { String screenName = this.getRequestURI(); if (screenName.lastIndexOf("/") > 0) { screenName = screenName.substring(screenName.lastIndexOf("/") + 1, screenName.length()); } return screenName; } /** * @return */ public String getEvent() { return getParams().get("fevent"); } /** * @return */ public String getResultType() { return getParams().get("result_type", "SUCCESS"); } /** * Server에 도메인을 리턴한다. ex> http://www.sample.co.kr:80/ ex> * http://www.sample.co.kr:80/contextName/ * * @return */ public String getServerDomain() { String str = ""; str += super.getRequest().getScheme() + "://" + super.getRequest().getServerName() + ":" + super.getRequest().getServerPort(); if (!super.getRequest().getContextPath().equals("")) { str += "/" + super.getRequest().getContextPath(); } return str; } /** * 시스템에서 사용하는 로케일을 리턴 * * @return */ public Locale getLocale() { return (Locale) (super.getRequest().getSession().getAttribute(WebKeys.LOCALE)); } /** * 요청한 URI를 리턴 * * @return */ public String getRequestURI() { return (String) this.request.getSession().getAttribute(WebKeys.CURRENT_URI); } }