当前位置:文档之家› 商业智能系统FineBI如何实现OAuth单点登录

商业智能系统FineBI如何实现OAuth单点登录

商业智能系统FineBI如何实现OAuth单点登录
商业智能系统FineBI如何实现OAuth单点登录

商业智能系统FineBI如何实现 OAuth单点登录

OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。oAuth是Open Authorization的简写。

1.2 OAuth单点登录原理

通过过滤器拦截请求,期间通过aouth的认证过程,拿到user,实现帆软的单点登录。

1.3 实现步骤

1.将以下4个jave(HttpUtil.java、myexporter.java、myfilter.java、SSLConnectionClient.java)文件编译为class文件后,放到FineBI对应工程路径下:\WebReport\WEB-INF\classes\com\fr

注:若FineBI对应工程路径下的WEB-INF文件夹中没有classes\com\fr该路径,自行新建该路径。

HttpUtil.java

1.package com.fr;

2.

3.import https://www.doczj.com/doc/385318661.html,.hsqldb.lib.StringUtil;

4.

5.import https://www.doczj.com/doc/385318661.html,.ssl.*;

6.import java.io.*;

7.import https://www.doczj.com/doc/385318661.html,.HttpURLConnection;

8.import https://www.doczj.com/doc/385318661.html,.URL;

9.import https://www.doczj.com/doc/385318661.html,.URLDecoder;

10.import https://www.doczj.com/doc/385318661.html,.URLEncoder;

11.import java.security.SecureRandom;

12.import java.security.cert.X509Certificate;

13.import java.util.HashMap;

14.import java.util.Map;

15.import java.util.Map.Entry;

16.

17./**

18. * 进行http访问的基本类

19. */

20.public class HttpUtil {

21.

22.private static final String DEFAULT_CHARSET = "UTF-8";

23.

24.private static final String METHOD_POST = "POST";

25.

26.private static final String METHOD_GET = "GET";

27.

28.private static final int CONNECTTIMEOUT = 5000;

29.

30.private static final int READTIMEOUT = 5000;

31.

32.private static class DefaultTrustManager implements X509TrustMa

nager {

33.

34.public X509Certificate[] getAcceptedIssuers() {

35.return null;

36. }

37.

38.@Override

39.public void checkClientTrusted(X509Certificate[] cert, Stri

ng oauthType)

40.throws java.security.cert.CertificateException {

41. }

42.

43.@Override

44.public void checkServerTrusted(X509Certificate[] cert, Stri

ng oauthType)

45.throws java.security.cert.CertificateException {

46. }

47. }

48.

49.private static HttpURLConnection getConnection(URL url, String

method, String ctype)

50.throws IOException {

51. HttpURLConnection conn = null;

52.if ("https".equals(url.getProtocol())) {

53. SSLContext ctx = null;

54.try {

55. ctx = SSLContext.getInstance("TLS");

56. ctx.init(new KeyManager[0], new TrustManager[] { ne

w DefaultTrustManager() },

57.new SecureRandom());

58. } catch (Exception e) {

59.throw new IOException(e);

60. }

61. HttpsURLConnection connHttps = (HttpsURLConnection) url

.openConnection();

62. connHttps.setSSLSocketFactory(ctx.getSocketFactory());

63. connHttps.setHostnameVerifier(new HostnameVerifier() {

64.public boolean verify(String hostname, SSLSession s

ession) {

65.return true;// 默认都认证通过

66. }

67. });

68. conn = connHttps;

69. } else {

70. conn = (HttpURLConnection) url.openConnection();

71. }

72. conn.setRequestMethod(method);

73. conn.setDoInput(true);

74. conn.setDoOutput(true);

75. conn.setRequestProperty("User-Agent", "quantangle-

apiclient-java");

76. conn.setRequestProperty("Content-Type", ctype);

77. conn.setRequestProperty("Connection", "Keep-Alive");

78.return conn;

79. }

80.

81./**

82. * 通过get方法访问,默认编码为utf-8

83. *

84. * @param url 访问的url地址

85. * @param params 请求需要的参数

86. * @return 返回请求响应的数据

87. * @throws IOException

88. */

89.public static String doGet(String url, Map para

ms) throws IOException {

90.return doGet(url, params, DEFAULT_CHARSET);

91. }

92.

93./**

94. * 通过get方法访问

95. *

96. * @param url 访问的url地址

97. * @param params 请求需要的参数

98. * @param charset 字符编码

99. * @return 返回请求响应的数据

100. * @throws IOException

101. */

102.public static String doGet(String url, Map pa rams, String charset)

103.throws IOException {

104.if (StringUtil.isEmpty(url) || params == null) {

105.return null;

106. }

107. String response = "";

108. url += "?" + buildQuery(params, charset);

109. HttpURLConnection conn = null;

110. String ctype = "application/x-www-form-

urlencoded;charset=" + charset;

111. conn = getConnection(new URL(url), METHOD_GET, ctype); 112. response = getResponseAsString(conn);

113.return response;

114. }

115.

116./**

117. *

118. * @param url api请求的权路径url地址

119. * @param params api请求的业务级参数

120. * @return

121. * @throws IOException

122. */

123.public static String doPost(String url, Map p arams) throws IOException {

124.return doPost(url, params, CONNECTTIMEOUT, READTIMEOUT);

125. }

126.

127./**

128. *

129. * 通过post方法请求数据,默认字符编码为utf-8

130. *

131. * @param url 请求的url地址

132. * @param params 请求的参数

133. * @param connectTimeOut 请求连接过期时间

134. * @param readTimeOut 请求读取过期时间

135. * @return 请求响应

136. * @throws IOException

137. */

138.public static String doPost(String url, Map p arams, int connectTimeOut,

139.int readTimeOut) throws IOExcepti on {

140.return doPost(url, params, DEFAULT_CHARSET, connectTimeOu t, readTimeOut);

141. }

142.

143./**

144. *

145. * 通过post方法请求数据

146. *

147. * @param url 请求的url地址

148. * @param params 请求的参数

149. * @param charset 字符编码格式

150. * @param connectTimeOut 请求连接过期时间

151. * @param readTimeOut 请求读取过期时间

152. * @return 请求响应

153. * @throws IOException

154. */

155.public static String doPost(String url, Map p arams, String charset,

156.int connectTimeOut, int readTimeO ut) throws IOException {

157. HttpURLConnection conn = null;

158. String response = "";

159. String ctype = "application/x-www-form-

urlencoded;charset=" + charset;

160. conn = getConnection(new URL(url), METHOD_POST, ctype); 161. conn.setConnectTimeout(connectTimeOut);

162. conn.setReadTimeout(readTimeOut);

163. conn.getOutputStream().write(buildQuery(params, charset).

getBytes(charset));

164. response = getResponseAsString(conn);

165.return response;

166. }

167.

168./**

169. *

170. * @param params 请求参数

171. * @return 构建query

172. */

173.public static String buildQuery(Map params, S tring charset) {

174.if (params == null || params.isEmpty()) {

175.return null;

176. }

177. StringBuilder sb = new StringBuilder();

178.boolean first = true;

179.for (Entry entry : params.entrySet()) { 180.if (first) {

181. first = false;

182. } else {

183. sb.append("&");

184. }

185. String key = entry.getKey();

186. String value = entry.getValue();

187.if (!StringUtil.isEmpty(key) && !StringUtil.isEmpty(v alue)) {

188.try {

189. sb.append(key).append("=").append(URLEncoder.

encode(value, charset));

190. } catch (UnsupportedEncodingException e) {} 191. }

192. }

193.return sb.toString();

194.

195. }

196.

197.public static Map splitQuery(String query, St ring charset) {

198. Map ret = new HashMap();

199.if (!StringUtil.isEmpty(query)) {

200. String[] splits = query.split("\\&");

201.for (String split : splits) {

202. String[] keyAndValue = split.split("\\=");

203.boolean flag=true;

204.int i=0;int len=keyAndValue.length;

205.for (;i

206. {

207.if (StringUtil.isEmpty(keyAndValue[i]))

208. {

209. flag=false;

210.break;

211. }

212. }

213.if (flag && keyAndValue.length == 2) {

214.try {

215. ret.put(keyAndValue[0], URLDecoder.decode (keyAndValue[1], charset));

216. } catch (UnsupportedEncodingException e) {} 217. }

218. }

219. }

220.return ret;

221. }

222.

223.private static byte[] getTextEntry(String fieldName, String f ieldValue, String charset)

224.throws IOException {

225. StringBuilder entry = new StringBuilder();

226. entry.append("Content-Disposition:form-data;name=\""); 227. entry.append(fieldName);

228. entry.append("\"\r\nContent-Type:text/plain\r\n\r\n"); 229. entry.append(fieldValue);

230.return entry.toString().getBytes(charset);

231. }

232.

233.private static byte[] getFileEntry(String fieldName, String f ileName, String mimeType,

234. String charset) throws IOE xception {

235. StringBuilder entry = new StringBuilder();

236. entry.append("Content-Disposition:form-data;name=\""); 237. entry.append(fieldName);

238. entry.append("\";filename=\"");

239. entry.append(fileName);

240. entry.append("\"\r\nContent-Type:");

241. entry.append(mimeType);

242. entry.append("\r\n\r\n");

243.return entry.toString().getBytes(charset);

244. }

245.

246.private static String getResponseAsString(HttpURLConnection c onn) throws IOException {

247. String charset = getResponseCharset(conn.getContentType() );

248. InputStream es = conn.getErrorStream();

249.if (es == null) {

250.return getStreamAsString(conn.getInputStream(), chars et);

251. } else {

252. String msg = getStreamAsString(es, charset);

253.if (StringUtil.isEmpty(msg)) {

254.throw new IOException("{\"" + conn.getResponseCod e() + "\":\"" + conn.getResponseMessage() + "\"}");

255. } else {

256.throw new IOException(msg);

257. }

258. }

259.

260. }

261.

262.private static String getStreamAsString(InputStream input, St ring charset) throws IOException {

263. StringBuilder sb = new StringBuilder();

264. BufferedReader bf = null;

265.try {

266. bf = new BufferedReader(new InputStreamReader(input, charset));

267. String str;

268.while ((str = bf.readLine()) != null) {

269. sb.append(str);

270. }

271.return sb.toString();

272. } finally {

273.if (bf != null) {

274. bf.close();

275. bf = null;

276. }

277. }

278.

279. }

280.

281.private static String getResponseCharset(String ctype) { 282. String charset = DEFAULT_CHARSET;

283.if (!StringUtil.isEmpty(ctype)) {

284. String[] params = ctype.split("\\;");

285.for (String param : params) {

286. param = param.trim();

287.if (param.startsWith("charset")) {

288. String[] pair = param.split("\\=");

289.if (pair.length == 2) {

290. charset = pair[1].trim();

291. }

292. }

293. }

294. }

295.return charset;

296. }

297.

298.}

myexporter.java

1.package com.fr;

2.import com.fr.base.DynamicUnitList;

3.import com.fr.base.FRContext;

4.import com.fr.base.ResultFormula;

5.import https://www.doczj.com/doc/385318661.html,paratorUtils;

6.import com.fr.general.DeclareRecordType;

7.import com.fr.general.ModuleContext;

8.import com.fr.general.web.ParameterConsts;

9.import com.fr.io.TemplateWorkBookIO;

10.import com.fr.io.exporter.AppExporter;

11.import com.fr.io.exporter.PDFExporter;

12.import com.fr.io.exporter.WordExporter;

13.import com.fr.json.JSONArray;

14.import com.fr.json.JSONException;

15.import com.fr.json.JSONObject;

16.import com.fr.main.TemplateWorkBook;

17.import com.fr.main.workbook.ResultWorkBook;

18.import com.fr.page.PageSetProvider;

19.import com.fr.page.PaperSettingProvider;

20.import com.fr.report.cell.CellElement;

21.import com.fr.report.cell.DefaultTemplateCellElement;

22.import com.fr.report.cell.ResultCellElement;

23.import com.fr.report.cell.cellattr.PageExportCellElement;

24.import com.fr.report.core.ReportUtils;

25.import com.fr.report.core.block.PolyResultWorkSheet;

26.import com.fr.report.module.EngineModule;

27.import com.fr.report.worksheet.PageRWorkSheet;

28.import com.fr.stable.CodeUtils;

29.import com.fr.stable.ColumnRow;

30.import com.fr.stable.PageActor;

31.import com.fr.stable.unit.FU;

32.import com.fr.stable.unit.UNIT;

33.import com.fr.web.Browser;

34.import com.fr.web.core.ErrorHandlerHelper;

35.import com.fr.web.core.utils.ExportUtils;

36.import com.fr.web.utils.WebUtils;

37.import javax.servlet.ServletException;

38.import javax.servlet.http.HttpServlet;

39.import javax.servlet.http.HttpServletRequest;

40.import javax.servlet.http.HttpServletResponse;

41.import java.io.IOException;

42.import java.io.OutputStream;

43.import java.util.*;

44.import java.util.regex.Matcher;

45.import java.util.regex.Pattern;

46.public class myexporter extends HttpServlet {

47.private static boolean offlineWriteAble = true;

48.private static final Pattern KEY_VALUE_PATTERN = https://www.doczj.com/doc/385318661.html,pil

e("[^{,}]*:[^{,}]*");

49.public static void dealResponse4Export(HttpServletResponse res)

{

50. res.setHeader("Cache-Control", "public");

51. res.setHeader("Cache-Control", "max-age=3");

52. res.reset();

53. }

54.private static final long serialVersionUID = 1L;

55.public void doPost(HttpServletRequest request, HttpServletR

esponse response) throws ServletException, IOException {

56. doGet(request, response);

57. }

58.public void doGet(HttpServletRequest req, HttpServletRespon

se res) throws ServletException, IOException {

59.// 首先需要定义执行所在的环境,这样才能正确读取数据库信息

60.try {

61. ModuleContext.startModule(EngineModule.class.getNam

e());

62. dealResponse4Export(res);

63. String fileName = WebUtils.getHTTPRequestParameter(

req, ParameterConsts.__FILENAME__);

64. String format = WebUtils.getHTTPRequestParameter(re

q, "format");

65. Browser browser = Browser.resolve(req);

66. fileName = browser.getEncodedFileName4Download(file

Name);

67. List paraMapList = new ArrayList();

68. List reportPathList = new ArrayList();

69. PaperSettingProvider paperSettingProvider=null;

70.if (WebUtils.getHTTPRequestParameter(req, Parameter

Consts.REPORTLETS) != null) {

71. createReportsFromReportlets(WebUtils.getHTTPReq

uestParameter(req, ParameterConsts.REPORTLETS), reportPathList, par aMapList);

72. ResultWorkBook[] resultWorkBook = new ResultWor

kBook[reportPathList.size()];

73. PolyResultWorkSheet allInOneSheet = new PageRWo

rkSheet();

74.for (int i = 0; i < reportPathList.size(); i++)

{

75. TemplateWorkBook workbook = TemplateWorkBoo

kIO.readTemplateWorkBook(FRContext.getCurrentEnv(), String.valueOf( reportPathList.get(i)));

76. java.util.Map paraMap = (Map) paraMapList.g

et(i);

77. resultWorkBook[i] = workbook.execute(paraMa

p, new PageActor());

78.if (i==0)

79. {

80. paperSettingProvider=ReportUtils.getPap

erSettingListFromWorkBook(workbook).get(0);

81. }

82. }

83.int countx; int county; int length = result

WorkBook.length;

84.long sumx;long sumy;

85.long[] lengthx = new long[length];long[] l

engthy = lengthx.clone();

86.if (length > 0) {

87. lengthx[0] = lengthy[0] = 0;

88. }

89.for (int i = 1; i < length; i++) {

90. sumy = 0;

91. county = resultWorkBook[i - 1].getEleme

ntCaseReport(0).getRowCount();

92.while (county-- > 0) {

93. sumy = sumy + resultWorkBook[i - 1]

.getElementCaseReport(0).getRowHeight(county).getLen();

94. }

95.

96. lengthx[i] = 0;lengthy[i] = sumy+length

y[i-1];

97. }

98. ArrayList verticalList = new ArrayLis

t();

99. ArrayList horizontalList = new ArrayL

ist();

100. analyElementColumnRow(verticalList, horiz ontalList, resultWorkBook, lengthx, lengthy);

101. allInOneSheet = setNewColRowSize(vertical List, horizontalList, allInOneSheet);

102.//填充空白单元格

103. allInOneSheet = fillBlankCell(verticalLis t.size(), horizontalList.size(), allInOneSheet);

104.for (int i = 0, len = reportPathList.size (); i < len; i++) {

105.//添加当前元素到新sheet中去

106. allInOneSheet = addElemToSheet(vertic alList, horizontalList, allInOneSheet, resultWorkBook[i], lengthx[i ], lengthy[i]);

107. }

108.if (paperSettingProvider==null)

109. {

110.return;

111. }

112.// 将结果工作薄导出为Excel文件

113. doExport(req, res, format, fileName,false, br owser,allInOneSheet.generateReportPageSet(paperSettingProvider)); 114. }

115. }catch(Exception e){

116. e.printStackTrace();

117. }

118. }

119.private static void doExport(HttpServletRequest req, HttpServ letResponse res,String format, String fileName, boolean isEmbbed, B rowser browser,PageSetProvider page) throws Exception {

120. AppExporter[] exporters = new AppExporter[] {null}; 121. DeclareRecordType[] exportTypes = new DeclareRecordType[] {null};

122. OutputStream outputStream = res.getOutputStream();

123. getExporterAndTypeAndexport(req, res, format, fileName, i sEmbbed, browser, exporters,exportTypes,outputStream,page);

124. DeclareRecordType exportType = exportTypes[0];

125.

126.if (exportType == null) {

127. ErrorHandlerHelper.getErrorHandler().error(req, res, "Cannot recognize the specifed export format:" + format + ",\nThe c orrect format can be PDF,Excel,Word,SVG,CSV,Text or Image."); 128.return;

129. }

130.

131.try {

132. outputStream.flush();

133. outputStream.close();

134. } catch (IOException e) {

135.// alex:有些Exporter在export里面可能会已经做了out.close 操作,为了不打印IOException,这里catch到之后不输出

136. }

137. }

138.private static void getExporterAndTypeAndexport(HttpServletRe quest req, HttpServletResponse res,

139. String format, String fileName, boolean isEmbbed, Browser browser, AppExporter[] exporter s, DeclareRecordType[] exportTypes,OutputStream out,PageSetProvider page) throws Exception{

140.if (format.equalsIgnoreCase("PDF")) {

141. ExportUtils.setPDFContent(res, fileName, isEmbbed); 142. PDFExporter PDFExport = new PDFExporter();

143. PDFExport.export(out, page);

144. } else if (format.equalsIgnoreCase("Word")) {

145. ExportUtils.setWordConetent(res, fileName);

146. WordExporter WordExport = new WordExporter();

147. WordExport.export(out, page);

148. }

149. }

150.// private static AppExporter getPDFExporter(HttpServletReques t req, ReportSessionIDInfor sessionIDInfor) {

151.// AppExporter exporter;

152.// String extype = WebUtils.getHTTPRequestParameter(req, "

extype");

153.// // james:是否是PDF客户端打印

154.// boolean isPDFPrint = ComparatorUtils.equals(WebUtils.ge tHTTPRequestParameter(req, "isPDFPrint"), "true");

155.// // 标志是否正在为客户端PDF打印而生成PDF文件

156.// // 打印的话,记录下

157.// if (isPDFPrint) {

158.// LogUtils.recordPrintInfo(sessionIDInfor.getBookPath (), sessionIDInfor.getParameterMap4Execute4Consisent(),

159.// DeclareRecordType.PRINT_TYPE_PDF, sessionID Infor);

160.// if (!Browser.resolve(req).isIE()) {

161.// FRContext.getLogger().error(Inter.getLocText("N S_print_pdf"));

162.// }

163.// }

164.// /*

165.// * 根据sessionIDInfor获取当前的打印机偏移量,若为打印则设置偏移导出则不偏移

166.// */

167.// SetPrinterOffsetService setprinteroffsetservice = new S etPrinterOffsetService();

168.// float[] offset = setprinteroffsetservice.getOffsetBySes sionIDInfor(sessionIDInfor);

169.// sessionIDInfor.setoffset(isPDFPrint ? offset : new floa t[2]);

170.// // carl:两种类型

171.// if (ComparatorUtils.equals(ExportConstants.TYPE_RESOLVE SOMETHING, extype)) {

172.// exporter = new PDFExporter2(isPDFPrint);

173.// } else {

174.// exporter = new PDFExporter(isPDFPrint);

175.// }

176.// return exporter;

177.// }

178.//

179.// private static void dealExcelExporter(HttpServletRequest re q, HttpServletResponse res, ReportSessionIDInfor sessionIDInfor, 180.// AppExporter[] exporte rs, DeclareRecordType[] exportTypes, String fileName, Browser brows er) {

181.// // carl:四种输出方式

182.// String extype = WebUtils.getHTTPRequestParameter(req, "

extype");

183.// // 假如是层式报表默认使用大数据方式

184.// ResultWorkBook wb = sessionIDInfor.getWorkBook2Show();

185.// boolean isPage = true; // 大数据量的时候要不要分页

186.// for (int i = 0; i < wb.getReportCount(); i++) {

187.// if (wb.getReport(i) instanceof LayerReport || wb.ge tReport(i) instanceof LayerPageReport) {

e(extype)) {

189.// isPage = false;

190.// }

191.// if (!ExportConstants.TYPE_PAGETOSHETT.equalsIgn oreCase(extype)) {

192.// extype = ExportConstants.TYPE_LARGEDATA_PAG E;

193.// }

194.// break;

195.// }

196.// }

197.//

198.// if (ExportConstants.TYPE_LARGEDATA_PAGE.equalsIgnoreCas e(extype)) {

199.// ExportUtils.setZipContext(res, fileName, browser.sh ouldSetContentTypeOnZipDownload());

200.// exporters[0] = new LargeDataPageExcelExporter(Repor tUtils.getPaperSettingListFromWorkBook(sessionIDInfor.getContextBoo k()), isPage);

201.// exportTypes[0] = DeclareRecordType.EXPORT_TYPE_EXCE L_LARGE;

202.// } else {

203.// if (ExcelUtils.checkPOIJarExist() && !WebUtils.getH TTPRequestBoolParameter(req, "isExcel2003")) {

204.// ExportUtils.setExcel2007Content(res, fileName);

205.// } else {

206.// ExportUtils.setExcelContent(res, fileName); 207.// }

208.//

209.// if (ExportConstants.TYPE_SIMPLE.equalsIgnoreCase(ex type)) {

210.// exporters[0] = new ExcelExporter(ReportUtils.ge tPaperSettingListFromWorkBook(sessionIDInfor.getContextBook())); 211.// exportTypes[0] = DeclareRecordType.EXPORT_TYPE_ EXCEL_ORIGINAL;

212.// } else if (ExportConstants.TYPE_PAGETOSHETT.equalsI gnoreCase(extype)) {

213.// exporters[0] = new PageToSheetExcelExporter(Rep ortUtils.getPaperSettingListFromWorkBook(sessionIDInfor.getContextB ook()));

214.// exportTypes[0] = DeclareRecordType.EXPORT_TYPE_ EXCEL_PAGESHEET;

Case(extype)) {

216.// exporters[0] = new StreamExcelExporter(ReportUt ils.getPaperSettingListFromWorkBook(sessionIDInfor.getContextBook() ));

217.// exportTypes[0] = DeclareRecordType.EXPORT_TYPE_ EXCEL_ORIGINAL;

218.// } else {

219.// exporters[0] = new PageExcelExporter(ReportUtil s.getPaperSettingListFromWorkBook(sessionIDInfor.getContextBook())) ;

220.// exportTypes[0] = DeclareRecordType.EXPORT_TYPE_ EXCEL_PAGE;

221.// }

222.//

223.// ((ExcelExporter)exporters[0]).setExcel2003(WebUtils .getHTTPRequestBoolParameter(req, "isExcel2003"));

224.// }

225.// }

226.//

227.// private static DeclareRecordType getImageExportType(HttpSer vletRequest req) {

228.// DeclareRecordType[] supportImageType = {DeclareRecordTy pe.EXPORT_TYPE_IMAGE_PNG, DeclareRecordType.EXPORT_TYPE_IMAGE_JPG,

229.// DeclareRecordType.EXPORT_TYPE_IMAGE_GIF, Declar eRecordType.EXPORT_TYPE_IMAGE_BMP, DeclareRecordType.EXPORT_TYPE_IM AGE_WBMP

230.// };

231.// String extype = WebUtils.getHTTPRequestParameter(req, "

extype");

232.// int defaulttype = 0;

233.// if (extype != null) {

234.// for (int i = 0; i < supportImageType.length; i++) {

235.// if (extype.equalsIgnoreCase(supportImageType[i] .getTypeString())) {

236.// defaulttype = i;

237.// break;

238.// }

239.// }

240.// }

241.// return supportImageType[defaulttype];

242.// }

243.public static PolyResultWorkSheet fillBlankCell(int rowCount, int colCount,PolyResultWorkSheet allInOneSheet ){

244.for (int i = 0; i < rowCount; i++) {

245.for (int j = 0; j < colCount; j++) {

246.//填充空白格, 主要是为了方便后续分页取cell iterator.next方便, 不然是null就不往下走了

247. ResultCellElement ce = createDefaultCellElement(j , i);

248. allInOneSheet.addCellElement(ce);

249. }

250. }

251. allInOneSheet.setRowMappingArray(new int[0]);

252. allInOneSheet.setColumnMappingArray(new int[0]);

253.return allInOneSheet;

254. }

255.public static ResultCellElement createDefaultCellElement(int col, int row){

256.return new PageExportCellElement(new DefaultTemplateCellE lement(col, row));

257. }

258.public static PolyResultWorkSheet addElemToSheet(ArrayList< UNIT> verticalList, ArrayList horizontalList, PolyResultWorkS heet page_sheet, ResultWorkBook resultWorkBook,long lengthx,long l engthy){

259. UNIT x= FU.getInstance(lengthx);

260. UNIT y= FU.getInstance(lengthy);

261. DynamicUnitList newRowList = page_sheet.getRowHeightList_ DEC();

262. DynamicUnitList newColList = page_sheet.getColumnWidthLis t_DEC();

263.int rowCount = page_sheet.getRowCount();

264.int colCount = page_sheet.getColumnCount();

265. DynamicUnitList rowHeightList = resultWorkBook.getElement CaseReport(0).getRowHeightList_DEC();

266. DynamicUnitList colWidthList = resultWorkBook.getElementC aseReport(0).getColumnWidthList_DEC();

267. Iterator it = resultWorkBook.getElementCase Report(0).cellIterator();

268. HashMap columnRowMap = new HashMap();

269. HashMap formulaMap = new Hash Map();

270.while(it.hasNext()){

271. CellElement ce = it.next();

272. UNIT ceX = x.add(colWidthList.getRangeValueFromZero(c

e.getColumn()));

273. UNIT ceWidth = colWidthList.getRangeValue(ce.getColum n(), ce.getColumn() + ce.getColumnSpan());

274. UNIT ceY = y.add(rowHeightList.getRangeValueFromZero( ce.getRow()));

275. UNIT ceHeight = rowHeightList.getRangeValue(ce.getRow (), ce.getRow() + ce.getRowSpan());

276.//直接去坐标列表里找, 然后+1, 因为行高list就是根据坐标列表生成的.

277.int newCeCol = horizontalList.indexOf(ceX) + 1; 278.int newCeColSpan = getNewSpan(newCeCol, newColList, c eWidth, colCount);

279.int newCeRow = verticalList.indexOf(ceY) + 1;

280.int newCeRowSpan = getNewSpan(newCeRow, newRowList, c eHeight, rowCount);

281. ColumnRow oriCR = ColumnRow.valueOf(ce.getColumn(), c

e.getRow());

282. ColumnRow newCR = ColumnRow.valueOf(newCeCol, newCeRo w);

283.//记录下格子的变迁, A1->B5, 这样后续公式有用到A1的都改成B5

284. columnRowMap.put(oriCR.toString(), newCR.toString());

285. ResultCellElement newCe = (ResultCellElement) ce.deri veCellElement(newCeCol, newCeRow, newCeColSpan, newCeRowSpan); 286. page_sheet.addCellElement(newCe);

287.if(ce.getValue() instanceof ResultFormula){

288. formulaMap.put(newCe, (ResultFormula) ce.getValue ());

289. }

290. }

291.//改变所有保留公式里的ColumnRow

292. modifyAllFormula(formulaMap, columnRowMap);

293.return page_sheet;

294. }

295.public static int getNewSpan(int newCeColRow, DynamicUnitList newColRowList, UNIT ceWidthHeight, int count){

296.for (int i = newCeColRow; i < count + 1; i++) {

297.if(ComparatorUtils.equals(ceWidthHeight, newColRowLis t.getRangeValue(newCeColRow, i))){

298.return i - newCeColRow;

299. }

300. }

301.

302.return0;

303. }

304.public static PolyResultWorkSheet setNewColRowSize(ArrayL ist verticalList, ArrayList horizontalList, PolyResu ltWorkSheet allInOneSheet){

305.//从坐标列表里生成行高列宽 [0, 2, 6] -> [2, 4]

306.for (int i = 0; i < verticalList.size(); i++) {

307. UNIT lastCoordinate = i == 0 ? UNIT.ZERO : verticalLi st.get(i - 1);

308. UNIT rowHeight = verticalList.get(i).subtract(lastCoo rdinate);

309. allInOneSheet.setRowHeight(i, rowHeight);

310. }

311.

312.for (int i = 0; i < horizontalList.size(); i++) {

313. UNIT lastCoordinate = i == 0 ? UNIT.ZERO : horizontal List.get(i - 1);

314. UNIT colWidth = horizontalList.get(i).subtract(lastCo ordinate);

315. allInOneSheet.setColumnWidth(i, colWidth);

316. }

317.return allInOneSheet;

318. }

319.public static void analyElementColumnRow(ArrayList vert icalList, ArrayList horizontalList,

320. ResultWorkBook [] re sultWorkBooks,long [] lengthx,long [] lengthy){

321.int length=resultWorkBooks.length;

322.for (int i=0;i

323. ResultWorkBook resultWorkBook = resultWorkBooks[i]; 324. UNIT y = FU.getInstance(lengthy[i]);

325.int rowCount = resultWorkBook.getElementCaseReport(0) .getRowCount();

326. DynamicUnitList rowHeightList = resultWorkBook.getEle mentCaseReport(0).getRowHeightList_DEC();

327. analyColumnRow(y, verticalList, rowHeightList, rowCou nt);

328.

329.//列处理

330. UNIT x = FU.getInstance(lengthx[i]);

331.int colCount = resultWorkBook.getElementCaseReport(0) .getColumnCount();

332. DynamicUnitList colWidthList = resultWorkBook.getElem entCaseReport(0).getColumnWidthList_DEC();

333. analyColumnRow(x, horizontalList, colWidthList, colCo unt);

334.

335.//得到的多个块, 需要按序排列下, 才好切行高

336. }

337. sort(verticalList, horizontalList);

338. }

339.public static void analyColumnRow(UNIT startPoint, ArrayList verticalSet,

340. DynamicUnitList rowHeightL ist, int count){

341. verticalSet.add(startPoint);

342.for (int i = 0; i < count; i++) {

343. UNIT rowHeight = rowHeightList.getRangeValueFromZero(

i + 1);

344. UNIT rowY = rowHeight.add(startPoint);

345. verticalSet.add(rowY);

346. }

347. }

348.public static void sort(ArrayList verticalList, Array List horizontalList){

349.

350. Comparator compare = new Comparator() { 351.

352.public int compare(UNIT o1, UNIT o2) {

353.if (o1.subtract(o2).equal_zero()){

354.return0;

355. }

356.

357.return o1.subtract(o2).more_than_zero() ? 1 : -1;

358. };

359. };

360.

361. Collections.sort(verticalList, compare);

362. Collections.sort(horizontalList, compare);

363. }

364.private static void modifyAllFormula(HashMap formulaMap, HashMap columnRowMap){ 365. Iterator> formulaIt = formulaMap.entrySet().iterator();

366.while(formulaIt.hasNext()){

统一认证与单点登录系统-产品需求规格说明书

统一认证与单点登录系统产品需求规格说明书 北京邮电大学

版本历史

目录 0文档介绍 (5) 0.1 文档目的 (5) 0.2 文档范围 (5) 0.3 读者对象 (5) 0.4 参考文档 (5) 0.5 术语与缩写解释 (5) 1产品介绍 (7) 2产品面向的用户群体 (7) 3产品应当遵循的标准或规范 (7) 4产品范围 (7) 5产品中的角色 (7) 6产品的功能性需求 (8) 6.0 功能性需求分类 (8) 6.0.1产品形态 (8) 6.1 外部系统管理 (9) 6.1.1外部系统注册 (9) 6.1.2外部系统集成配置 (11) 6.2 用户管理 (11) 6.2.1用户管理控制台 (11) 6.2.2用户自助服务 (13) 6.2.3统一用户管理 (13) 6.3 组织结构管理 (14) 6.4 权限管理 (15) 6.4.1统一角色管理 (18) 6.5 单点登录 (18) 6.5.1基于Httpheader单点登录 (19) 6.5.2基于表单代填的方式单点登录 (20) 6.5.3基于CAS单点登录 (20) 6.5.4总结 (23) 7产品的非功能性需求 (24) 7.1.1性能需求 (24) 7.1.2接口需求 (24) 8附录B:需求确认 (25)

0文档介绍 0.1文档目的 此文档用于描述统一认证与单点登录系统的产品需求,用于指导设计与开发人员进行系统设计与实现。 0.2文档范围 本文档将对系统的所有功能性需求进行消息的描述,同时约定非功能性以及如何与第三方系统进行交互。 0.3读者对象 本文档主要面向一下读者: 1.系统设计人员 2.系统开发与测试人员 3.系统监管人员 4.产品甲方管理人员 0.4参考文档 《凯文斯信息技术有限公司单点登录及统一用户技术方案V1.0》 0.5术语与缩写解释

peoplesoft系统员工自助操作手册v.0

威高集团Peoplesoft系统用户操作手册 -- 自助服务 创建日期: 2016-8-5 控制编码: 当前版本: 2.0

目录 第一章用户手册惯例及系统通用操作 (3) 1.1系统连接与访问方式 (3) 1.1.1客户端和浏览器要求 (3) 1.1.2网络要求 (3) 1.1.3单点登录 (3) 1.2用户登录与更改密码 (4) 1.2.1用户登录 (4) 1.2.2更改密码 (5) 第二章员工自助 (6) 2.1功能概述 (6) 2.2操作说明 (6) 2.2.1查看信息 (6) 2.2.2修改信息 (8) 2.2.2.1修改手机号码 (8) 2.2.2.2修改邮箱信息 (10) 第三章用户手册惯例及系统通用操作 (13) 3.1系统概述 (13) 3.2手册术语 (13) 3.2.1操作约定 (13) 3.2.2页面常见按钮/图标解释 (14) 文档控制 (15)

第一章用户手册惯例及系统通用操作 1.1系统连接与访问方式 2.2.1 客户端和浏览器要求 威高集团安装的PeopleSoft系统是当前最新版本——PeopleSoft 9.2。新版本中除了增加和完善部分新功能之外,在视觉美观方面也大大增强。 如欲获得最佳视觉体验,请使用较高版本的浏览器,如Internet Explorer 7.0或以上版本、Chrome28或以上版本、Mozilla Firefox 3.5或以上版本。 2.2.2 网络要求 网络方面,根据威高集团人力资源部要求,PeopleSoft系统能够通过外网及内网访问。访问地址如下: 外网:http://221.2.165.51:8070/ 内网:http://172.16.7.72/ 2.2.3 单点登录 员工可通过云办公快捷路径登录Peoplesoft系统,访问方式如下图所示:

单点登录系统(SSO)详细设计说明书

单点登录系统(SSO)详细设计说明书 1、引言 1.1编写目的 为了单点登录系统(SSO系统)的可行性,完整性,并能按照预期的设想实现该系统,特编写需求说明书。 同时,说明书也发挥与策划和设计人员更好地沟通的作用。 1.2背景 a.鉴于集团运营的多个独立网站(称为成员站点),每个网站都具有自己的身份验证机制,这样势必造成:生活中的一位用户,如果要以会员的身份访问网站,需要在每个网站上注册,并且通过身份验证后,才能以会员的身份访问网站;即使用户以同样的用户名与密码在每个网站上注册时,虽然可以在避免用户名与密码的忘记和混淆方面有一定的作用,但是用户在某一段时间访问多个成员站点或在成员站点间跳转时,还是需要用户登录后,才能以会员的身份访问网站。这样不仅给用户带来了不便,而且成员网站为登录付出了性能的代价; b.如果所有的成员网站,能够实现单点登录,不仅在用户体验方面有所提高,而且真正体现了集团多个网站的兄弟性。通过这种有机结合,能更好地体现公司大平台,大渠道的理念。同时,这样做也利于成员网站的相互促进与相互宣传。 正是出于上面的两点,单点登录系统的开发是必须的,是迫在眉睫的。1.3定义 单点登录系统提供所有成员网站的“单一登录”入口。本系统的实质是含有身份验证状态的变量, 在各个成员网站间共用。单点登录系统,包括认证服务器(称Passport服务器),成员网站服务器。 会员:用户通过Passport服务器注册成功后,就具有了会员身份。 单一登录:会员第一次访问某个成员网站时,需要提供用户名与密码,一旦通过Passport服务器的身份验证, 该会员在一定的时间内,访问任何成员网站都不需要再次登录。 Cookie验证票:含有身份验证状态的变量。由Passport服务器生成,票含有用户名,签发日期时间, 过期日期时间和用户其它数据。

中国联通合作方自服务门户系统操作手册-合作方人员操作V_1.0

中国联合网络通信有限公司合作方自服务门户系统 操作手册 文档作者: 创建日期: 确认日期: 当前版本: 审批人

文档控制 -创建- 增加- 修订

目录 1.概述 (4) 1.1.编写说明 (4) 1.2.术语解释 (4) 1.3.合作方注册与添加业务员的说明 (5) 1.1.合作方人员自助操作 (7) 2.1.1合作方自服务门户首页操作介绍 (7) 2.1.2合作方自助注册 (8) 【业务场景】 (8) 【功能概要】 (9) 【操作流程】 (9) 【操作说明】 (10) 【注意事项】 (15) 2.1.3合作方自助新增合作范围 (16) 【业务场景】 (16) 【功能概要】 (16) 【操作流程】 (17) 【操作说明】 (17) 【注意事项】 (21) 2.1.4合作方自助新增业务员 (22) 【业务场景】 (22) 【功能概要】 (22) 【操作流程】 (22) 【操作说明】 (23) 【注意事项】 (29) 2.1.5合作方管理员登录系统操作 (30) 【业务场景】 (30) 【功能概要】 (30) 【操作流程】 (30) 【操作说明】 (30) 【注意事项】 (42) 2.1.6合作方业务员登录系统操作 (42) 【业务场景】 (42) 【功能概要】 (42) 【操作流程】 (42) 【操作说明】 (42) 【注意事项】 (47)

1.概述 1.1.编写说明 本操作手册依据确认的合作方需求规格说明书—《中国联通合作方管理应用业务需求规格说明书V2.0》撰写。 手册介绍合作方登录合作方自服务门户的自助操作和联通合作方管理员通过联通云门户单点登录到合作方自服务门户对合作方管理的操作。 所有的联通员工,统一接入云门户,并通过云门户一点访问所有的业务应用系统;所有的合作方人员(供应商、合作伙伴、代理商等),统一接入合作方自服务门户,并通过合作方自服务门户一点访问相关的业务应用系统; 本用户操作手册的每一章按合作方业务中涉及的基本操作类型来展开,手册是合作方业务的操作说明,包括以下四个方面: 1.业务场景:描述功能实现的业务前提。 2.功能概要:此功能的概要描述; 3.操作流程:业务实现的系统流程。 4.操作说明:系统内的操作步骤。 5.注意事项:操作规范化内容。 本操作手册将尽量做到准确、详细、全面,报告中如有错误、不当、或遗漏的问题,请客户方予以纠正和补充。 此说明文档将作为解决方案及其以后实施工作的重要依据,需要用友和联通双方最终确认,如果需要更改或添加内容,则必须由双方共同协商同意后才可。 未经特别提示,本手册中不以图示中内容信息为准,仅供参考。 1.2.术语解释

网上办税服务厅登录操作手册

单点登录系统 用户操作手册 大连市国家税务局 大连市地方税务局 2016年5月

目录前言 1.模块功能 1.1登录 1.2修改密码 1.3手机号维护 1.4用户切换 1.5国税网上申报 1.6国税网上办税 1.7财务报表 1.8出口退税综合服务平台

前言 为进一步全面推行“营改增”政策,贯彻落实《国家税务局地方税务局合作工作规范(2.0版)》,现推出“大连市国家税务局大连市地方税务局网上办税服务厅”,该系统集成了国税网上申报系统、网上办税系统、出口退税系统、财务报表系统和地税网上申报系统功能,充分整合国地税资源,发挥各自优势,实现信息高度聚合和服务共享、数据同步。该系统改变了原国地税各办税系统单兵作战的模式,升级为国地税联合办税统一登陆的新模式,系统用户可以通过使用“纳税识别号+密码+手机短信验证”方式或纳税人专用CA证书进行登陆,实现了国地税所有网上系统用户入口的统一。系统充分考虑用户的操作习惯,老用户无需太多的培训即可上手,同时界面清晰实用,更具人性化,便于新用户入门。单点登录系统功能稳定可靠,符合纳税人办税需求,通过统一登陆安全性得到很大提高,做到网上办税“简单、安全、实用”的统一,为纳税人尤其是“营改增”企业提供了更加优质高效的服务。

1.功能模块 1.1登录 目前,纳税人可以通过三种登录方式进行登录: 方式1.纳税人可通过登陆https://www.doczj.com/doc/385318661.html,登陆网上办税服务厅; 方式2. 纳税人可通过点击大连市国税局网站主页链接登陆网上办税服务厅;

方式3. 纳税人可通过点击大连市地税局网站主页上的链接登陆网上办税服务厅。 1.1.1用户登录 纳税人登录网上办税服务厅后可以选择用户登录、证书登录、短信登录三种登录方式的其中一种方式进行登录。

CAS单点登录系统实操指南

CAS单点登录系统实操指南 CAS单点登录系统实操指南 (1) 1. CAS单点登录介绍 (3) 1.1. 什么是单点登录 (3) 1.2. 什么是CAS (3) 2. CAS服务端部署及配置 (5) 2.1. 基础部署配置 (5) 2.2. 去除https认证 (7) 2.3. 登录数据源设置 (8) 2.3.1 密码未加密处理 (8) 2.3.2 密码MD5加密配置 (9) 2.4. 登录页面的极简改造 (10) 3. CAS客户端搭建 (11) 3.1. 搭建工程并添加依赖 (11) 3.2. 单点登录配置 (12) 3.3. 单点登出配置 (14) 3.3.1 未重定向登出 (14) 3.3.2 重定向地址登出 (15) 3.4. 获取登录用户信息配置 (15) 4. CAS客户端与SpringSecurity集成 (16) 4.1. 搭建工程并添加依赖 (16)

4.2. 修改和创建配置文件 (18) 4.3. 创建Spring-security认证脚本 (22) 4.4. 获取登录名 (22)

1. CAS单点登录介绍 1.1. 什么是单点登录 单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。 1.2. 什么是CAS CAS 是Yale 大学发起的一个开源项目,旨在为Web 应用系统提供一种可靠的单点登录方法,CAS 在2004 年12 月正式成为JA-SIG 的一个项目。CAS 具有以下特点:

OA系统用户操作手册_简明版

目录 第一章欢迎 (2) 用户计算机环境需求 (2) 如何使用办公信息管理平台 (5) 第六章公文流转 (6) 概述 (6) 流程运转 (7) 公文发起 (7) 待批公文 (9) 已批公文 (9) 归档查询 (11)

第一章欢迎 办公信息管理平台是在Internet/Intranet环境下使用的网络应用软件,基于B/S的结构,平台的所有操作都在浏览器中进行,但平台对您的计算机 环境也有一定的要求。 用户计算机环境需求 正确的计算机环境才能让本平台的各种功能完美的得以实现,请按照下面的需求认真配置您的计算机环境。 软件环境需求 Microsoft Internet Explorer8.0(IE8.0)以上(建议使用IE8.0),为了更好的使用平台的各种功能,建议您更改IE浏览器中下面配置。在IE 浏览的菜单中选择工具|Internet选项,弹出浏览器的[Internet选项]配 置界面。在[常规]栏中,点击[Internet临时文件]的“设置”按钮,在弹 出的[设置]界面中将[检查所存网页的较新版本]选项设为“每次访问此页 时检查”。

在IE浏览的菜单中选择工具>>Internet选项,弹出浏览器的[Internet 选项]配置界面。在[安全]栏中,点击[受信任的站点]的再点击“站点”按钮,在弹出的[可信站点]界面中中加入http://OA服务器主机名或IP地址。对于没使用SSL技术的用户不要选择”对该区域的所有站点都要求服务器验证(https:)”

●(可选)Microsoft Office 2000或Microsoft Office 2003办公系列软 件。平台的有些功能模块如果有Office 系列软件支持会更好,详见具体的功能模块使用说明。 操作系统 ●Windows 2000/xp/2003 简体中文版 硬件环境需求

CAS 单点登录操作文档

这人CAS 在 Tomcat 中实现单点登录 1证书生成及导入 1.1Server端证书配置 1.2 JAVA信任证书库 D:\Program Files\Java\jdk1.5.0\jre\lib\security\cacerts cacerts证书库默认密码-storepass changeit 查看证书 1.1.1.2 keytool -list -keystore cacerts -storepass changeit 如果存在则删除 1.1.1.1 keytool -delete -alias tomcatsso -keystore cacerts -storepass changeit 创建证书库 1.1.1.3 keytool -genkey -keyalg RSA -alias tomcatsso -dname "cn=https://www.doczj.com/doc/385318661.html," -keystore server.keystore -storepass 12345678 导出证书 1.1.1.4 keytool -export -alias tomcatsso -file tomcatsso.crt -keystore server.keystore -storepass 12345678 加入JAVA信任证书库 1.1.1.5 keytool -import -alias tomcatsso -file tomcatsso.crt -keystore ../jre/lib/security/cacerts -storepass changeit 说明:在生成key的过程,"cn=https://www.doczj.com/doc/385318661.html," 中的https://www.doczj.com/doc/385318661.html,为Server端的域名(必填)。 1.2.1TOMCAT 配置SSL支持

【单点登录】统一内部应用门户用户操作手册

BN市劳动保障 总集成及公共服务建设项目统一内部应用门户 用户操作手册 (V3.0)

目录 第一章系统介绍 (1) 1.1统一内部应用门户 (1) 1.2组织机构管理 (2) 1.3单点登录系统 (1) 第二章操作流程 (3) 2.1登陆流程 (3) 2.2个性化首页 (4) 2.3进入业务系统 (4) 第三章组织机构维护 (6) 3.1进入组织机构管理 (6) 3.2维护行政区划管理 (7) 3.3维护组织单元类型 (8) 3.4维护组织单元管理 (9) 3.5维护岗位管理 (13) 3.6维护用户管理 (15) 第四章配置管理 (18) 4.1系统管理 (18) 4.2菜单管理 (20) 4.3资源管理 (21) 第五章安全管理 (22) 5.1用户注册管理 (22) 5.2用户组织关系变更查询 (23) 5.3统一审计管理 (23) 5.4组织单元变更日志 (24) 5.5CA绑定管理 (24) 5.6访问策略管理 (25) 5.7用户信息查看 (26)

5.8在线用户查看 (27) 5.9帐号状态管理 (27) 5.10组织角色授权 (28) 5.11安全管理角色 (29) 5.12业务角色管理 (31) 5.13用户密码修改 (32) 第六章公共服务 (33) 6.1网站管理 (33) 6.1.1新建网站 (33) 6.1.2设为缺省网站 (35) 6.1.3更改网站名称 (36) 6.1.4委派网站管理员 (36) 6.1.5设定网站可访问人群 (38) 6.1.6网站导入 (39) 6.1.7网站导出 (41) 6.1.8网站删除 (42) 6.2页面管理 (42) 6.2.1新建页面 (43) 6.2.2创建链接 (44) 6.2.3编辑页面 (46) 6.2.4删除页面 (47) 6.2.5复制页面 (47) 6.2.6向上移动页面 (48) 6.2.7向下移动页面 (50) 6.2.8移动页面到 (51) 6.2.9配置模板 (51) 6.2.10手工编辑 (52) 6.2.11页面属性编辑(通用) (53) 6.3模板管理 (62) 6.3.1添加模板 (62)

单点登录需求规格说明书 - 副本

江苏省广播电视信息网络股份有限公司苏 州分公司 关于SSO单点登录 需求规格说明书

文档控制 ●更改记录 Date表示修改日期,author表示修改负责人,Version表示当前版本,起始版本v1.0,修改后顺序依次为v1.1,v1.2等,change reference表示根据何种原因发生变更,变更来源等。 ●查阅 ●分发

目录 一,概述 (4) 1. 编写目的 (4) 2. 范围 (4) 3. 读者对象 (4) 4. 参考文档 (4) 5. 名词术语定义 (4) 二,系统说明 (4) 1. 描述 (4) 三,需求 (5) 1. 流程图 (5) 2. 实现原理 (5) 四,用例 (6) 1. 描述 (6) 2. 用例文档 (6) 3. 用例图 (7) 五,运行环境 (7) 1. 硬件环境要求 (7) 2. 软件环境要求 (8)

一,概述 江苏省广播电视信息网络股份有限公司苏州分公司(以下简称广电),目前内部的应用系统包括金蝶EAS、BOSS、呼叫中心等,信息系统希望集成类似单点登录的功能,既在金蝶的EAS门户中登录后能避免其他各系统的登录界面,公司员工只需要登录一次就可以访问所有相互信任的应用系统。 由于实现SSO单点登录的方式各不相同,要求不一,因此关于广电SSO单点登录的实现方式将以此文档的描述为准。 1.编写目的 本文档是金蝶软件(中国)有限公司苏州分公司在与江苏省广播电视信息网络有限公司苏州分公司的《苏州广电网络公司信息系统建设方案》基础上编制的。 本文档的编写为下阶段的设计、开发提供依据,为广电与金蝶双方项目组成员对当前需求提供详尽的理解,以及在开发开发过程中的协同工作提供强有力的保证,同时本文档也作为项目评审验收的依据之一。 本文档由甲乙双方项目负责人签字后方可生效,需求内容如需修改,应由合作双方协商一致,任何一方不可单独修改。 2.范围 本系统包括:EAS授权认证中心,各独立站点授权验证服务两部分组成,通过对广电的充分调研,尽可能的满足双方在合同和相关投标书中所描述的功能。 3.读者对象 本文档适用于参加本项目的所有管理人员、开发方的系统设计人员、开发人员、测试人员以及需求方的相关业务人员等。 4.参考文档 《苏州广电网络公司信息系统建设方案V1.8》章节6,公司信息化其他问题。 5.名词术语定义 用户:登录EAS门户的所有合法用户。 用例图:被称为参与者的外部用户所能观察到的系统功能的模型图,呈现了一些参 与者和一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为 进行建模。 二,系统说明 1.描述 单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 目前实现SSO的产品和解决方案众多,如:Microsoft公司的Passport, IBM WebSphere Portal Server、Netegrity Site Minder、Oracle 9i AS Portal Server以及Liberty等。上述SSO产品的实现机制不尽一样,它们分别有着不同的侧重点并且适合于不同的系统架构。

极地内网内控安全管理系统内控堡垒主机操作手册v精选

极地内网内控安全管理系统 (内控堡垒主机) 操作手册 北京市海淀区上地安宁庄西路9号金泰富地大厦8层 电话:010- 传真:010- 客服:400-01234-18 邮编:100085 网站:

目录

一、前言 欢迎使用内控堡垒主机系统,本用户使用手册主要介绍内控堡垒主机部署结构、配置、使用和管理。通过阅读本文档,用户可以了解内控堡垒主机系统的基本设计思想,配置和使用方法。在安装、使用内控堡垒主机系统之前,请仔细阅读文档内容。 本章内容主要包括: ●本文档的用途。 ●阅读对象。 ●本文档的组织结构。 ●如何联系北京极地安全技术支持。 1.1 文档目的 本文档主要介绍如何配置和使用内控堡垒主机系统。通过阅读本文档,用户能够正确地部署和配置内控堡垒主机系统。 1.2 读者对象 本安装手册适用于具有基本网络知识的安全管理员、系统管理员阅读,通过阅读本文档,他们可以独自完成以下一些工作: ●内控堡垒主机系统的功能使用。 ●内控堡垒主机系统的策略配置与管理。 1.3 文档组织 本文档包括以下章节及其主要内容: ●前言,介绍了本手册各章节的基本内容、文档和技术支持信息。 ●系统简介,介绍内控堡垒主机系统的部署结构和登录方法。 ●系统应用,介绍如何配置使用内控堡垒主机系统。 1.4 技术支持 北京极地公司对于生产的安全产品提供远程的产品咨询服务,广大用户和合作伙伴可以通过多种方式获取在线文档、疑难解答等全方位的技术支持。

公司主页提供交互网络服务,用户及合作伙伴可以在世界的任何地方,任何时候访问技术支持中心,获取实时的网络安全解决方案、安全服务和各种安全资料。 ●传真: 010- ●客服经理承接质量问题投诉邮箱: 二、系统简介 内控堡垒主机系统是极地安全内控解决方案的重要组成部分,部署在企业的内部网络中,用于保护企业内部核心资源的访问安全。 内控堡垒主机是一种被加固的可以防御进攻的计算机,具备很强安全防范能力。内控堡垒主机扮演着看门者的工作,所有对网络设备和服务器的请求都要从这扇大门经过。因此内控堡垒主机能够拦截非法访问,和恶意攻击,对不合法命令进行命令阻断,过滤掉所有对目标设备的非法访问行为。 内控堡垒主机具备强大的输入输出审计功能,不仅能够详细记录用户操作的每一条指令,而且能够将所有的输出信息全部记录下来,也具备图形终端操作的审计功能,能够对多平台的多种图形终端操作做审计,并且内控堡垒主机具备审计回放的功能,能够模拟用户在线操作过程。总之,内控堡垒主机能够极大的保护企业内部网络设备及服务器资源的安全性,使得企业内部网络管理合理化,专业化,信息化。 2.1 关键字 用户名:也叫主帐号,使用内控堡垒主机的用户统称为用户名。 资源:内控堡垒主机管理的主机系统,数据库,网络设备等统称为资源。例如AIX系统、Windows2000系统、DB2数据库、CISCO3560等。 从账号:从账号是资源中的账号,例如AIX中的root账号,Windows2000中的Administrator账号。 SSO单点登录:SSO(SingleSign-On)中文为单点登录,就是说在同一个地点完成对不同资源的访问。 策略:控制用户登录、设置密码、禁止使用命令、允许访问命令的方法。 2.2 部署结构

单点登录方案说明书

单点登录方案说明书

修订记录

目录 1引言 (4) 1.1方案综述 (4) 1.2参考资料 (4) 1.3术语定义及说明 (4) 2技术方案 (4) 2.1方案一 filter服务 (4) 2.2方案二CAS (8) 2.3方案三OAuth (10) 2.4方案四SAML (11) 2.5方案五OpenID (13)

单点登录方案说明书 1引言 1.1方案综述 下面介绍了五个主流的单点登录技术,简单概述一下每个技术的优缺点: 方案一:属于单独创建的一个登录服务,需集成的软件登录都需要继承这个服务。实现单点登录的要点在于,每个用户登录成功之后将生成一个ticket(票),每个程序通用这个ticket。 方案二: CAS本身没有授权,也没有权限控制,但是CAS支持SAML,所以就支持了权限控制。 方案三:OAUTH需要认证才可以获取登录权限,比较不适合我们情况 方案四:SAML支持XACML协议进行权限控制。SAML协议较OAUTH来说确实比较复杂,但是功能也十分强大,支持认证,权限控制和用户属性。 方案五:OpenID是IDP提供一个身份唯一标识把第三方的应用帐号绑定到唯一标识上,只起到了认证的作用。 1.2参考资料 https://www.doczj.com/doc/385318661.html,/alonesword/article/details/12190075 https://www.doczj.com/doc/385318661.html,/Article/201312/268621.html https://www.doczj.com/doc/385318661.html,/detail/48346-sso-%E7%99%BB%E5%BD%95 https://www.doczj.com/doc/385318661.html,/link?url=ainiguhU2QB6PQCslL4nciBvux3UIzq50YUwS PEfoRntQOouVn-ks97xt8RCu9dlbQTJQvT0M8v0FjIBJZPY7aTx4ZVRTr1vy1xrGbszOCC 1.3术语定义及说明 SSO:Single Sign On 单点登录 CAS:Central Authentication Service OAuth:Open Authorization 开放授权 SAML:Security Assertion Markup Language 安全断言标记语言 2技术方案 2.1方案一 filter服务 SSO实现方式,有一个SSO Server,也会叫认证中心。同时也会有被认证的系统,即client 端系统。 此方案中, Server端是自己构建服务端,不依赖任何第三方技术。 为了更形象体现SSO,我写的SSO是有三个工程:一个SSO Server端口为8081,一个OA系统端口为8082,一个采购系统端口为8083。如图:

中国联通合作方自服务门户系统操作手册合作方人员操作V

中国联合网络通信有限公司 合作方自服务门户系统 操作手册 文档作者: 创建日期: 确认日期: 当前版本: 审批人

文档控制 目录 1.概述........................................................... 1.1.编写说明............................................................. 1.2.术语解释............................................................. 1.3.合作方注册与添加业务员的说明......................................... 1.1.合作方人员自助操作................................................... 2.1.1合作方自服务门户首页操作介绍....................... 2.1.2合作方自助注册..................................... 【业务场景】............................................ 【功能概要】............................................ 【操作流程】............................................ 【操作说明】............................................ 【注意事项】............................................ 2.1.3合作方自助新增合作范围............................. 【业务场景】............................................ 【功能概要】............................................ 【操作流程】............................................ 【操作说明】............................................ 【注意事项】............................................ 2.1.4合作方自助新增业务员............................... 【业务场景】............................................ 【功能概要】............................................ 【操作流程】............................................ 【操作说明】............................................ 【注意事项】............................................ 2.1.5合作方管理员登录系统操作........................... 【业务场景】............................................ 【功能概要】............................................ 【操作流程】............................................ 【操作说明】............................................ 【注意事项】............................................ 2.1.6合作方业务员登录系统操作...........................

中国电信集中MSS项目外部门户系统操作手册

中国电信2013年 全国集中MSS外部门户系统

文档管理 文档信息 版本信息 批准 姓名: ____________________________ 日期: ___________姓名: ____________________________ 日期: ___________目录

1.1编制说明 本操作手册适用于指导中国电信全国集中MSS项目外部门户系统的学习使用。 1.2项目背景 通过集中MSS系统的建设,目标是在中国电信全国范围内建立一个集中、规范、统一的管理支撑系统的平台。通过数据规范的统一和数据透明促进企业内部数据和信息的共享,建立贯穿集团、省、地市的采购与库存管理体系一体化和标准化管理流程,提高采购执行效率、规范采购业务行为、规避采购风险,降低库存水平、提升供应链的总体运营效率;通过建立集团级企业管理信息数据仓库,为业务部门和管理层提供实时准确的业务管理和决策支持信息。 其次,通过建设集中MSS系统这样一个规范高度统一、业务高度集成的平台,为加强业务整合、统一业务模式、规范业务操作、优化业务流程、固化管理要求提供有效的管理手段和强有力的系统支撑。 总之,通过集中MSS系统的建设,将有效促进中国电信的纵向管理一体化和横向业务集成化进而达到集约高效,为中国电信进一步提高管理水平、保持可持续发展和实现精确管理搭建强大的技术和管理平台。

2供应商注册 2.1业务说明 与电信合作单位需要在门户系统发起供应商注册申请,供应商注册审批通过后全国通用; 2.2涉及角色 2.3操作流程 2.3.1.1供应商注册 操作程序 点击供应商注册 进入供应商注册协议相关页面,可以选择同意或者不同意,同意就继续进行供应商注册,否则退出注册 点击同意,进入供应商基础信息填写,供应商需要选择自己与电信合作业务范围,不同的业务范围区别不同的供应商注册审核人员; 基础信息填写完成后,点击下一步进入供应商详细信息填写,门户系统采取分布式填写信息,避免供应商需要一次性填写完所有相关信息后保存数据,通过分布式指引填写,供应商更能方便简洁的完成供应商注册

电子商务管理平台(EBM)建设项目BI系统项目管理-单点登录用户手册

电子商务管理平台(EBM)建设项目BI系统项目管理-单点登录用户手册 作者: 创建日期: 最后更新: 控制号: 版本: V1.0 顾问 业务组长 关键用户 第 1 页共 13 页

文档控制变更记录 审核 分发

目录 文档控制 (2) 1.EBM 与 BI EE系统集成方案(单点登录) (5) 1.1由EBM系统自动登录BI系统的设计指南 (5) 创建功能 (5) 创建菜单 (7) 责任分配 (7) 为用户分配责任 (8) 配置文件设置 (9) 1.2由BI系统返回EBM系统的设计指南 (12) 遗留和解决问题 (13) 未解决问题 (13) 已解决问题 (13)

1.EBM 与 BI EE系统集成方案(单点登录) 本方案实现了现代集团EBM系统与BI系统的系统集成,即单点登录。用户可以通过EBM系统直接通过调用责任跳转到BI系统查看其所属用户组权限内的报表;并且,用户可以再从BI系统通过点击特定的报表返回BI系统主页面。 1.1由EBM系统自动登录BI系统的设计指南 配置事项: 1.本文档中的各类命名仅作参考;正式环境命名规范由信息中心相关人员自定。 2.软件描述:本指南仅基于EBS R12 与BI EE 10.1. 3. 4.1。如果发生产品升级或变更,请参照 Oracle提供的其他的补充文档。 3.以下相关EBM截屏及配置过程均在English模式下进行。 1.1.1EBM相关设置 创建功能 1.如下图所示,创建一个功能(Function), 命名为SBA ANSWERS

2.在功能属性页输入下面值: Type= SSWA jsp function 3.在 Web HTML 页签,输入; HTML Call=OracleOasis.jsp?mode=OBIEE&function=Dashboard

单点登录说明文档

单点登录说明文档 目的 对Portal和Tivoli的单点功能进行分析,对下一步中实施SSO提供参考,本文档中的Portal指的是IBM WebSphere Portal、Tivoli指的是IBM Tivoli Access Manager for eb(本文档中简称为TAM),同步辅助Tivoli Identity Manager(本文档中简称为TIM)、Tivoli Directory Integrator(本文档简称TDI)实施。 文档约定 文档中的蓝色字体表明用户操作对单点的影响。 红色字体表明应该加倍注意的地方。 文档中的的Tivoli的目录服务器指IBM Tivoli Directory Server 本文仅对单一域的单点进行说明。 本文档中没有涉及CS结构的业务系统进行说明。 Portal单点解决方案(当前方案) Portal可实现哪些单点,各种单点都有哪些实现的条件? 1、不需要认证的的系统 a)可以通过链接直接实现,或者通过IFrame直接在Portal中内嵌,不需要 任何条件 b)没有密码,所有单点在任何情况下不受影响 2、支持LTPA的系统 a)这类系统有Domino、WebSphere应用(支持LTPA的应用)。一般专指 Domino。(例如Sametime、以及Rone V4版本) b)通过Portal和目标系统共享LDAP来实现 3、可以通过用户名和密码进行表单登录的系统 a)第三方软件可通过提交含有用户名和密码的表单登陆访问或可以通过改

造实现该功能 b)浏览器中输入%URL%?username=<用户名>&pasword=可以 登录 c)要求登录的时候不能出现随机的参数,例如:验证码 d)第三方软件不绑定IP、安全性不高 e)门户网站必须开发此功能的Portlet f)在Portlet 手动中保存URL、请求方式等 g)用户在第一次登录的时候必须保存用户名、密码,以后请求不用。 h)使用该系统的用户需要将该系统的服务器域名,以及门户系统的域名全 部加入到浏览器的“可信任站点”列表中。 i)如果用户在第三方系统中修改了密码,那么单点将失效,必须在Portal 中手动修改密码。 Tivoli单点解决方案(新架构方案) Tivoli可以实现哪些单点?各种单点有哪些条件? 1、不需要认证的的系统 a)可以直接实现 b)没有密码管理,单点在任何情况下不受影响 2、支持LTPA的系统 a)一般指Portal和Domino b)实现Portal的单点要求迁移Portal用户到Tivoli的目录服务器。使用Portal 的LTPA的key文件创建到Portal的联结。 3、Form Base的单点(GSO) a)第三方软件可通过提交含有用户名和密码的表单登陆访问或可以通过改 造实现该功能 b)要求登录表单中没有随机的参数出现,如:验证码 c)用户在目标系统中修改了密码,在实施了TIM的情况下,密码会自动进 行同步,所以单点不受影响。(业务系统,调用TIM的接口,反向同步) 4、Http Header的单点

SGMW单点登录系统用户手册__V4.0

单点登录系统用户手册 _服务站用户 山水慧普信息技术无锡有限公司 2013年5月

版本记录 Copyright ? 2010-2012SSHP. All Rights Reserved. 山水慧普版权所有第2页共14页

目录 1引言 (4) 1.1系统名称 (4) 1.2预期的读者和阅读建议 (4) 1.3缩略语定义 (4) 2系统介绍 (5) 3功能介绍 (6) 3.1登录系统 (6) 3.2系统管理 (8) 3.2.1用户管理 (8) 3.2.2角色管理 (10) 3.3修改密码 (14) Copyright ? 2010-2012SSHP. All Rights Reserved. 山水慧普版权所有第3页共14页

1 引言 1.1 系统名称 单点登录系统 1.2 预期的读者和阅读建议 预期读者:服务站用户,项目小组/关键用户,IT数据支持人员; 阅读建议:服务站用户需要阅读全部内容,其他人员以此文档作为了解和使用本系统的参考手册。 1.3 缩略语定义 SGMW:上汽通用五菱汽车股份有限公司; 系统:单点登录系统。 Copyright ? 2010-2012SSHP. All Rights Reserved. 山水慧普版权所有第4页共14页

2 系统介绍 由于SGMW目前使用的系统比较多,且考虑到今后还会有扩展的需求,需要建立一个上汽通用五菱的服务商门户,免除用户需要多次登录不同的系统带来的麻烦。本系统是由服务站和总部的管理员使用,涵盖了维修网点管理、系统管理和修改密码三大功能模块。 本文档为提供给服务站用户的指导手册,其中,服务站管理员可以使用的功能有:系统管理和修改密码两大功能模块;服务站成员只有修改密码的功能。本文档对用户管理功能进行了详细的说明。 Copyright ? 2010-2012SSHP. All Rights Reserved. 山水慧普版权所有第5页共14页

单点登录系统(SSO)详细设计说明书

单点登录系统(SSO)详细设计说明书1、引言 编写目的 为了单点登录系统(SSO系统)的可行性,完整性,并能按照预期的设想实现该系统,特编写需求说明书。 同时,说明书也发挥与策划和设计人员更好地沟通的作用。 背景 a.鉴于集团运营的多个独立网站(称为成员站点),每个网站都具有自己的身份验证机制,这样势必造成:生活中的一位用户,如果要以会员的身份访问网站,需要在每个网站上注册,并且通过身份验证后,才能以会员的身份访问网站;即使用户以同样的用户名与密码在每个网站上注册时,虽然可以在避免用户名与密码的忘记和混淆方面有一定的作用,但是用户在某一段时间访问多个成员站点或在成员站点间跳转时,还是需要用户登录后,才能以会员的身份访问网站。这样不仅给用户带来了不便,而且成员网站为登录付出了性能的代价; b.如果所有的成员网站,能够实现单点登录,不仅在用户体验方面有所提高,而且真正体现了集团多个网站的兄弟性。通过这种有机结合,能更好地体现公司大平台,大渠道的理念。同时,这样做也利于成员网站的相互促进与相互宣传。 正是出于上面的两点,单点登录系统的开发是必须的,是迫在眉睫的。定义 【 单点登录系统提供所有成员网站的“单一登录”入口。本系统的实质是含有身份验证状态的变量, 在各个成员网站间共用。单点登录系统,包括认证服务器(称Passport服务器),成员网站服务器。 会员:用户通过Passport服务器注册成功后,就具有了会员身份。 单一登录:会员第一次访问某个成员网站时,需要提供用户名与密码,一旦通过Passport服务器的身份验证, 该会员在一定的时间内,访问任何成员网站都不需要再次登录。 Cookie验证票:含有身份验证状态的变量。由Passport服务器生成,票含有用户名,签发日期时间,

相关主题
文本预览
相关文档 最新文档