File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-07-22
package itn.let.mjo.pay.web;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.LoginVO;
import itn.com.cmm.service.EgovCmmUseService;
import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.service.FileVO;
import itn.com.cmm.util.RedirectUrlMaker;
import itn.let.cop.bbs.service.Board;
import itn.let.mjo.msg.service.MjonMsgService;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.pay.service.MjonPayService;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.mjo.pay.service.RefundService;
import itn.let.mjo.payva.service.VacsVactService;
import itn.let.mjo.payva.service.VacsVactVO;
import itn.let.uss.umt.service.EgovMberManageService;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.utl.fcc.service.EgovCryptoUtil;
import itn.let.utl.user.service.CheckFileUtil;
import itn.let.utl.user.service.CheckLoginUtil;
/*
*
* settle bank Virtual Account
*
* */
@Controller
public class MjonSBVAPayController {
@Resource(name = "mjonPayService")
private MjonPayService mjonPayService;
/** EgovMessageSource */
@Resource(name="egovMessageSource")
EgovMessageSource egovMessageSource;
/** userManageService */
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
/** refundService */
@Resource(name = "refundService")
private RefundService refundService;
@Resource(name = "mjonMsgService")
private MjonMsgService mjonMsgService;
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
@Resource(name = "mberManageService")
private EgovMberManageService mberManageService;
@Resource(name = "EgovCmmUseService")
private EgovCmmUseService cmmUseService;
//암호화
@Resource(name = "egovCryptoUtil")
EgovCryptoUtil egovCryptoUtil;
//로그인 처리
@Resource(name = "checkLoginUtil")
private CheckLoginUtil checkLoginUtil;
//무료 대행 관련 쿼리
//@Resource(name="addrAgencyService")
//private AddrAgencyService addrAgencyService;
//가상계좌원장
@Resource(name="vacsVactService")
private VacsVactService vacsVactService;
//첨부파일 체크
@Resource(name = "checkFileUtil")
private CheckFileUtil checkFileUtil;
//파일 체크 & 관리
@Resource(name="EgovFileMngUtil")
private EgovFileMngUtil egovFileMngUtil;
//파일 정보 관리
@Resource(name="EgovFileMngService")
private EgovFileMngService fileMngService;
private static final Logger logger = LoggerFactory.getLogger(MjonSBVAPayController.class);
/////////////////////////////////////////////////////////////////////////////////////////
//
//
// USER
//
//
/**
* 세틀뱅크 가상계좌 결제 Action 페이지
* @param searchVO
* @param model
* @return "/web/pay/PayView.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/member/payva/SBPayActionAjax.do"})
public String KGMPayActionAjax(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO,
HttpServletRequest request,
ModelMap model) throws Exception{
/*
String pattern = (String) request.getAttribute(
HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
*/
mjonPayVO.setReturnURL(request.getRequestURL().toString().split("pay")[0] + "payva/SBPayActionAjax.do") ;
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
//테스트
mjonPayVO.setBuyerName(loginVO.getName());
mjonPayVO.setBuyerEmail(loginVO.getEmail());
mjonPayVO.setMoid(loginVO.getId());
model.addAttribute("mjonPayVO", mjonPayVO);
return "web/cop/sb/mc_web";
}
/**
* KGM mobile 결제 okurl 페이지
* @param searchVO
* @param model
* @return "/web/pay/PayView.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/member/payva/OkUrl.do"})
public String OkUrl(
HttpServletRequest request
, ModelMap model
) throws Exception{
System.out.println("request.toString()");
System.out.println(request.toString());
return "web/cop/sb/okurl";
}
/**
* KGM mobile 결제 okurl 페이지
* @param searchVO
* @param model
* @return "/web/pay/PayView.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/member/payva/NotiUrl.do"})
public String NotiUrl(
HttpServletRequest request
, ModelMap model
) throws Exception{
System.out.println("request.toString()");
System.out.println(request.toString());
return "web/cop/sb/notiurl";
}
/////////////////////////////////////////////////////////////////////////////////////////
//
//
// ADMIN
//
//
/**
*세틀뱅크 가상계좌 리스트 관리 화면
* @param VacsVactVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/uss/ion/payva/selectVirtualAccountList.do"})
public String selectAddrAgencyListAdmin(
HttpServletRequest request
, @ModelAttribute("searchVO") VacsVactVO vacsVactVO
, ModelMap model
, RedirectAttributes redirectAttributes
) throws Exception {
//관리자 로그인 여부 체크
String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);
if (!"Y".equals(isLogin)) return isLogin;
//로그인 정보 획득
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
//login 정보
model.addAttribute("loginVO", loginVO);
//ajax를 위한 현재 URL 정보 받기
vacsVactVO.setUrl(request.getRequestURI());
return "/uss/ion/payva/VirtualAccountList";
}
/**
* 세틀뱅크 가상계좌 관리 리스트 ajax 부분
* @param addrVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/uss/ion/payva/selectVirtualAccountListAjax.do"})
public String selectAddrAgencyListAjaxAdmin(
HttpServletRequest request
, @ModelAttribute("searchVO") VacsVactVO vacsVactVO
, ModelMap model
, RedirectAttributes redirectAttributes
) throws Exception {
//관리자 로그인 여부 체크
String isLogin = checkLoginUtil.isLoginCheck4JsonPage(redirectAttributes);
if ("N".equals(isLogin)) return "/uss/ion/payva/VirtualAccountListAjax";
// pageing step1
PaginationInfo paginationInfo = this.setPagingStep1(vacsVactVO);
// pageing step2
vacsVactVO = this.setPagingStep2(vacsVactVO, paginationInfo);
//대상 리스트 가져오기
//관리자 리스트는 30일 마감에 대한 제한을 없애기 위해서 해당 값을 넣어준다.
List<VacsVactVO> vacsVactList = vacsVactService.selectList(vacsVactVO);
// pageing step3
paginationInfo = this.setPagingStep3(vacsVactList, paginationInfo);
//대상 리스트, 페이징 정보 전달
model.addAttribute("resultList", vacsVactList);
model.addAttribute("paginationInfo", paginationInfo);
return "/uss/ion/payva/VirtualAccountListAjax";
}
/**
* 세틀뱅크 가상계좌 등록
* @param searchVO
* @param model
* @return "/uss/ion/payva/VirtualAccountInsert"
* @throws Exception
*/
@RequestMapping(value = {"/uss/ion/payva/VirtualAccountInsert.do"})
public String AddrAgencyInsert(
@ModelAttribute("searchVO") VacsVactVO vacsVactVO
, HttpServletRequest request
, RedirectAttributes redirectAttributes
, Model model) throws Exception {
//관리자 로그인 여부 체크
String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);
if (!"Y".equals(isLogin)) return isLogin;
//사용자 정보
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
model.addAttribute("loginVO", loginVO);
return "/uss/ion/payva/VirtualAccountInsert";
}
/**
* 은행별 계좌번호 첨부파일을 디비에 저장
*
* @param VacsVactVO
* @param multiRequest
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/uss/ion/payva/insertVirtualAccountAjax.do"})
public ModelAndView insertAddrAgencyAjax(
HttpServletRequest request
, @ModelAttribute("insertAgency") VacsVactVO vacsVactVO
, final MultipartHttpServletRequest multiRequest
, @ModelAttribute("board") Board board
//, ModelMap model
, ModelAndView modelAndView
, RedirectAttributes redirectAttributes
) throws Exception {
//json 알림
modelAndView.setViewName("jsonView");
//사용자 로그인 여부 체크 for json
String isLogin = checkLoginUtil.isLoginCheck4JsonAction(modelAndView);
if ("N".equals(isLogin)) return modelAndView;
//파일 정상 처리 여부와 첨부 파일 정보
String atchFileId = this.readFile(multiRequest, modelAndView, "txt|xls|xlsx", 10, 1); //size and ea
if ("ERROR".equals(atchFileId)) return modelAndView;
//text 파일 읽어서 list에 넣기
List<String> sb = new ArrayList<>();
sb = checkFileUtil.extractFromTxtFile(multiRequest, sb);
if (sb.size()==0) {
//text 파일읽기가 안된경우 excel 읽기를 실행
sb = checkFileUtil.extractFromExcelFile(multiRequest, sb);
}
//필요 쿼리 생성 및 처리 - 계좌번호만 작성된 파일 처리
String s_split = "\t";
int i_plan_size = 1;
String s_in_query = "'0'";
String s_select_query = "SELECT '0' acct_no";
for (int i=0;i<sb.size();i++) {
String[] s_tmp = sb.get(i).split(s_split);
if (s_tmp.length==i_plan_size) {
s_in_query = s_in_query + ",'" + s_tmp[0] + "'";
s_select_query = s_select_query + " UNION ALL SELECT '" + s_tmp[0] + "'";
/*
//한 row에 여러값이 있는 경우 처리 방법
for (int j=0;j<i_plan_size;j++) {
System.out.println(s_tmp[j].toString());
}
*/
}
}
System.out.println(s_in_query);
System.out.println(s_select_query);
//중복수량 확인
vacsVactVO.setAcctNo(s_in_query);
System.out.println(vacsVactVO.toString());
System.out.println(vacsVactVO.getAcctNo());
int i_over_count = vacsVactService.selectOverCount(vacsVactVO);
System.out.println("i_over_count");
System.out.println(i_over_count);
//비중복 저장
vacsVactVO.setOrgCd("31001412");
vacsVactVO.setCmfNm("ITN"); //회사명 셋팅
vacsVactVO.setAcctNo(s_select_query);
//입금가능 기준 금액
vacsVactVO.setTrAmt("5000");
//입금가능 기준 금액보다
//0 조건없음
//1금액=실금액
//2 금액>=실입금액
//3 금액<=실입금액
vacsVactVO.setTramtCond("3");
//txt 파일에서 읽어온 list 사이즈
int readTxtListSize = sb.size();
int i_insert_count = vacsVactService.updateBulk(vacsVactVO);
System.out.println("txt파일에서 읽은 가상계좌 list size :: " + readTxtListSize);
System.out.println("DB에 insert 된 가상계좌 list size :: " + i_insert_count);
System.out.println("i_insert_count");
System.out.println(i_insert_count);
//정합성 체크해서 처리하기
//step1.기존에 사용중인지 확인 하기
//step2.나머지는 저장 처리
//step3.사용중인것 리스트 ret해서 처리하기
//System.out.println(s_in_query);
//System.out.println(s_select_query);
//게시판 등록하기
//modelAndView = this.insertAddrAgencyBoard(modelAndView, atchFileId, addrAgencyVO, board.getNttCn(), loginVO.getId(), multiRequest);
if(readTxtListSize == i_insert_count) {
modelAndView.addObject("result", "success");
modelAndView.addObject("message", "계좌번호 저장에 성공하였습니다.");
}else if(i_insert_count == 0){
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "계좌번호 저장에 실패하였습니다.");
}else {
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "첨부자료의 계좌수와 입력된 계좌수가 다릅니다.");
}
return modelAndView;
}
/**
* 세틀뱅크 가상계좌번호 수정 화면
* @param VacsVactVO
* @param model
* @return "/uss/ion/payva/VirtualAccountModify"
* @throws Exception
*/
@RequestMapping(value = {"/uss/ion/payva/VirtualAccountModify.do"})
public String MjonNumberModify(
@ModelAttribute("searchVO") VacsVactVO vacsVactVO
, HttpServletRequest request
, Model model
, RedirectAttributes redirectAttributes
) throws Exception {
//관리자 로그인 여부 체크
String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);
if (!"Y".equals(isLogin)) return isLogin;
//수정 대상 정보 가져오기
vacsVactVO = vacsVactService.selectDetail(vacsVactVO);
model.addAttribute("VacsVactVO", vacsVactVO);
return "/uss/ion/payva/VirtualAccountModify";
}
/**
* 세틀뱅크 가상계좌번호 수정처리
*
* @param boardVO
* @param board
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/uss/ion/payva/updateVirtualAccountAjax.do"})
public ModelAndView updateVirtualAccountAjax(
HttpServletRequest request
, @ModelAttribute("updateAgency") VacsVactVO vacsVactVO
//, ModelMap model
, ModelAndView modelAndView
, RedirectAttributes redirectAttributes
) throws Exception {
modelAndView.setViewName("jsonView");
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
//사용자 로그인 여부 체크 for json
String isLogin = checkLoginUtil.isLoginCheck4JsonAction(modelAndView);
if ("N".equals(isLogin)) return modelAndView;
//게시판 등록하기
try {
vacsVactService.update(vacsVactVO);
VacsVactVO hstryVO = vacsVactService.selectDetail(vacsVactVO);
hstryVO.setMberId(loginVO.getId());
//원장 상태 변경 이력 저장
vacsVactService.insertVacsHistory(hstryVO);
modelAndView.addObject("message", egovMessageSource.getMessage("success.common.update"));
modelAndView.addObject("result", "success");
}catch(Exception ex){
ex.printStackTrace();
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 가상계좌 관리 삭제 프로세서
* @param searchVO
* @param model
* @return "/uss/ion/payva/VirtualAccountDelete.do"
* @throws Exception
*/
@RequestMapping(value = {"/uss/ion/payva/VirtualAccountDelete.do"})
public String AddrAgencyDelete(
@RequestParam("del") String[] del
, @ModelAttribute("searchVO") VacsVactVO vacsVactVO
, HttpServletRequest request
, RedirectAttributes redirectAttributes
, Model model
) throws Exception {
//관리자 로그인 여부 체크
String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);
if (!"Y".equals(isLogin)) return isLogin;
//전달받은 AddrAgencyId로 삭제처리
try {
int i_delete_count = 0;
int i_cant_delete_count = 0;
for(String id: del) {
String[] a_param = id.split("_"); //은행코드 & 계좌번호
if (a_param.length==2) {
vacsVactVO.setBankCd(a_param[0]);
vacsVactVO.setAcctNo(a_param[1]);
vacsVactVO.setQuery(" AND MBER_ID is null ");
if (vacsVactService.deleteWithQuery(vacsVactVO)>0) {
i_delete_count++;
}else {
i_cant_delete_count++;
}
}else {
i_cant_delete_count++;
}
}
if (i_cant_delete_count>0) {
redirectAttributes.addFlashAttribute("message", "요청하신 "+(i_delete_count+i_cant_delete_count)+"건 중에서 "+i_delete_count+"건 삭제, "+i_cant_delete_count+"건 사용자 할당으로 비 삭제되었습니다.");
}else {
redirectAttributes.addFlashAttribute("message", "요청하신 "+(i_delete_count+i_cant_delete_count)+"건 "+egovMessageSource.getMessage("success.common.delete"));
}
}catch(Exception e) {
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.delete"));
}
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/payva/selectVirtualAccountList.do");
return redirectUrlMaker.getRedirectUrl();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// private function
//
//
//페이징을 위한 처리 step1 - 페이징 기본 정보 설정
private PaginationInfo setPagingStep1(VacsVactVO p_vacsVactVO)throws Exception{
// pageing step1
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(p_vacsVactVO.getPageIndex());
paginationInfo.setRecordCountPerPage(p_vacsVactVO.getPageUnit());
paginationInfo.setPageSize(p_vacsVactVO.getPageSize());
return paginationInfo;
}
//페이징을 위한 처리 step2 - 게시물 리스트 수량 설정 및 검색 조건 초기화
private VacsVactVO setPagingStep2(
VacsVactVO p_vacsVactVO
, PaginationInfo p_paginationInfo
)throws Exception{
// pageing step2
p_vacsVactVO.setFirstIndex(p_paginationInfo.getFirstRecordIndex());
p_vacsVactVO.setLastIndex(p_paginationInfo.getLastRecordIndex());
p_vacsVactVO.setRecordCountPerPage(p_paginationInfo.getRecordCountPerPage());
if("".equals(p_vacsVactVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
p_vacsVactVO.setSearchSortCnd("REG_IL");
p_vacsVactVO.setSearchSortOrd("desc");
}
return p_vacsVactVO;
}
//페이징을 위한 처리 step3 - 전체 게시물 수량 설정하기
private PaginationInfo setPagingStep3(
List<VacsVactVO> p_vacsVactList
, PaginationInfo p_paginationInfo
)throws Exception{
// pageing step3
int totCnt = 0;
if(p_vacsVactList.size() > 0) totCnt = p_vacsVactList.get(0).getTotCnt();
p_paginationInfo.setTotalRecordCount(totCnt);
return p_paginationInfo;
}
//사용자 업로드 파일 처리 - 하나의 파일만 처리
private String readFile(
MultipartHttpServletRequest p_multiRequest
, ModelAndView p_modelAndView
, String p_exts //가능한 확장자를 받는다. |
, int p_i_file_size
, int p_i_file_count
//, BoardMasterVO p_bmVO
) throws Exception{
//Map<String, Object> p_map = new Map<>();
//Map<String, Object> in_map = new HashMap<>();
boolean in_bool = true;
List<FileVO> result = null;
String atchFileId = "";
String isThumbFile = "";
//String isThumbFile = "thumbFile"; //"thumbFile" - 썸네일을 생성한다.
final Map<String, MultipartFile> files = p_multiRequest.getFileMap();
if (!files.isEmpty()) {
result = egovFileMngUtil.parseFileInf(files, "ADDRAGENCY_", 0, "", "", isThumbFile);
// 파일 사이즈, 개수, 확장자 체크. model에 체크 오류 메세지 set
//관리자에서 게시판 설정시 업로드 파일 사이즈와 수량 체크용
if(!checkFileUtil.isPosblAtchFileMvWithUserSetting(result, p_modelAndView, 0, p_exts, p_i_file_size, p_i_file_count)) {
// 공통코드 Set
//setBBSCommCd(model, bmVO);
//model.addAttribute("bdMstr", bmVO);
//return "web/cop/bbs/EgovNoticeRegist";
//modelAndView.addObject("bdMstr", bmVO);
p_modelAndView.addObject("result", "fail");
in_bool = false;
}
//atchFileId = fileMngService.insertFileInfs(result); //첨부 파일
for(int i=0;i<result.size();i++) {
FileVO vo = (FileVO) result.get(i);
atchFileId = atchFileId + "|" + vo.fileStreCours + vo.streFileNm; //첨부 파일
}
//atchFileId = atchFileId + "|" + fileMngService.insertFileInfs(result); //첨부 파일
}
if (!in_bool) atchFileId = "ERROR";
return atchFileId;
}
//vacs_vact 가상계좌원장 내용 변경하기
/*
private ModelAndView insertAddrAgencyBoard(
ModelAndView p_modelAndView
//, Map<String, Object> p_fileResult
, String p_atchFileId
, VacsVactVO p_vacsVactVO
, String p_content
, String p_registerId
//, String p_processStatus
, MultipartHttpServletRequest p_multiRequest
) throws Exception{
//게시판 등록하기
try {
String p_processStatus = "";
//p_processStatus = p_vacsVactVO.getProcessStatus();
//if ("".equals(p_processStatus) || p_processStatus==null) p_processStatus = "B";
//p_vacsVactVO.setAtchFileId(p_atchFileId);
//p_vacsVactVO.setRequestTxt(unscript(p_content)); // XSS 방지
//p_vacsVactVO.setProcessStatus(p_processStatus); //처리상태 B/I/E
//p_vacsVactVO.setRegisterId(p_registerId);
//String userIp = EgovClntInfo.getClntIP(p_multiRequest);
//p_vacsVactVO.setNtcrIp(userIp);
vacsVactService.insert(p_vacsVactVO);
p_modelAndView.addObject("message", egovMessageSource.getMessage("success.common.insert"));
p_modelAndView.addObject("result", "success");
}catch(Exception ex){
ex.printStackTrace();
p_modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.insert"));
p_modelAndView.addObject("result", "fail");
}
return p_modelAndView;
}
*/
/**
* XSS 방지 처리.
*
* @param data
* @return
*/
protected String unscript(String data) {
if (data == null || data.trim().equals("")) {
return "";
}
String ret = data;
ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script");
ret = ret.replaceAll("</(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "</script");
ret = ret.replaceAll("<(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "<object");
ret = ret.replaceAll("</(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "</object");
ret = ret.replaceAll("<(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "<applet");
ret = ret.replaceAll("</(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "</applet");
ret = ret.replaceAll("<(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
ret = ret.replaceAll("</(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
ret = ret.replaceAll("<(F|f)(O|o)(R|r)(M|m)", "<form");
ret = ret.replaceAll("</(F|f)(O|o)(R|r)(M|m)", "<form");
//ret = ret.replaceAll("<", "<");
ret = ret.replaceAll("alert", "");
//ret = ret.replaceAll("iframe", "");
return ret;
}
}