根据交银施罗德真实环境已测试通过,此过程可以作为非J2EE部署的典型案例,主要是针对某些对安全性要求较高的解决方案:

基本的实现原理和部分代码如下:

1.客户端访问交银.net系统,由该系统发送请求,访问方式为:http://润乾报表服务器ip:9090/appsOnlineUms/index.jsp?token=b96335b0db0347bf9b98c4fb2a3fdb38


2.由index.jsp接收到传过来的token值(系统唯一值),

3.根据传过来的token值调用.net系统的定义的WebServices的http://portal.jysld.com/jyportalinterface/

reportrights.asmx方法,此方法里相关有用的信息

index.jsp部分代码:

<%

String token = request.getParameter(“token”);

System.out.println(“传过来的token:” + token);

ReportRightsClient client = new ReportRightsClient();

ReportRightsSoap service = client.getReportRightsSoap();

ReportRightResult reportResult=service.getRight(token);

String displayName= reportResult.getDisplayName();

String Account=reportResult.getAccount();

String raq= reportResult.getReportName();

boolean flag=reportResult.isRight();

session.setAttribute(“flag”, flag);

System.out.println(“别名:”+displayName);

System.out.println(“ACount:”+Account);

System.out.println(“报表名:”+raq);

System.out.println(“是否有权限:”+flag);

%>

4.对WebServices方法的处理两个基本java类:ReportRightsClient.java代码如下:

package com;

import java.net.MalformedURLException;

import java.util.Collection;

import java.util.HashMap;

import javax.xml.namespace.QName;

import org.codehaus.xfire.XFireRuntimeException;

import org.codehaus.xfire.aegis.AegisBindingProvider;

import org.codehaus.xfire.annotations.AnnotationServiceFactory;

import org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations;

import org.codehaus.xfire.client.XFireProxyFactory;

import org.codehaus.xfire.jaxb2.JaxbTypeRegistry;

import org.codehaus.xfire.service.Endpoint;

import org.codehaus.xfire.service.Service;

import org.codehaus.xfire.soap.AbstractSoapBinding;

import org.codehaus.xfire.transport.TransportManager;

import org.tempuri.ReportRightResult;

public class ReportRightsClient {

private static XFireProxyFactory proxyFactory = new XFireProxyFactory();

private HashMap endpoints = new HashMap();

private Service service0;

public ReportRightsClient() {

create0();

Endpoint ReportRightsSoapLocalEndpointEP = service0 .addEndpoint(new QName(“http://tempuri.org/”, “ReportRightsSoapLocalEndpoint”), new QName(“http://tempuri.org/”, “ReportRightsSoapLocalBinding”), “xfire.local://ReportRights”);


endpoints.put(new QName(“http://tempuri.org/”, “ReportRightsSoapLocalEndpoint”), ReportRightsSoapLocalEndpointEP);


Endpoint ReportRightsSoapEP = service0 .addEndpoint(new QName(“http://tempuri.org/”, “ReportRightsSoap”), new QName(“http://tempuri.org/”, “ReportRightsSoap”), “http://portal.jysld.com/jyportalinterface/reportrights.asmx”);


endpoints.put(new QName(“http://tempuri.org/”, “ReportRightsSoap”), ReportRightsSoapEP);


public Object getEndpoint(Endpoint endpoint) {

try {

return proxyFactory.create((endpoint).getBinding(), (endpoint).getUrl());

} catch (MalformedURLException e) {

throw new XFireRuntimeException(“Invalid URL”, e);

public Object getEndpoint(QName name) {

Endpoint endpoint = ((Endpoint) endpoints.get((name)));

if ((endpoint) == null) {

throw new IllegalStateException(“No such endpoint!”);

return getEndpoint((endpoint));

public Collection getEndpoints() {

return endpoints.values();

private void create0() {

TransportManager tm = (org.codehaus.xfire.XFireFactory.newInstance().getXFire().getTransportManager());


HashMap props = new HashMap();

props.put(“annotations.allow.interface”, true);

AnnotationServiceFactory asf = new AnnotationServiceFactory(new Jsr181WebAnnotations(), tm, new AegisBindingProvider(new JaxbTypeRegistry()));


asf.setBindingCreationEnabled(false);

service0 = asf.create((com.ReportRightsSoap.class), props);

AbstractSoapBinding soapBinding = asf.createSoap11Binding(service0, new QName(“http://tempuri.org/”, “ReportRightsSoapLocalBinding”), “urn:xfire:transport:local”);


AbstractSoapBinding soapBinding = asf.createSoap11Binding(service0, new QName(“http://tempuri.org/”, “ReportRightsSoap”), “http://schemas.xmlsoap.org/soap/http”);


public ReportRightsSoap getReportRightsSoapLocalEndpoint() {

return ((ReportRightsSoap)(this).getEndpoint(new QName(“http://tempuri.org/”, “ReportRightsSoapLocalEndpoint”)));


public ReportRightsSoap getReportRightsSoapLocalEndpoint(String url) {

ReportRightsSoap var = getReportRightsSoapLocalEndpoint();

org.codehaus.xfire.client.Client.getInstance(var).setUrl(url);

return var;

public ReportRightsSoap getReportRightsSoap() {

return ((ReportRightsSoap)(this).getEndpoint(new QName(“http://tempuri.org/”, “ReportRightsSoap”)));


public ReportRightsSoap getReportRightsSoap(String url) {

ReportRightsSoap var = getReportRightsSoap();

org.codehaus.xfire.client.Client.getInstance(var).setUrl(url);

return var;

public static void main(String[] args) {

ReportRightsClient client = new ReportRightsClient();

//create a default service endpoint

ReportRightsSoap service = client.getReportRightsSoap();

//TODO: Add custom client code here

//

//service.yourServiceOperationHere();

ReportRightResult reportResult=service.getRight(“b96335b0db0347bf9b98c4fb2a3fdb38″);


String displayName= reportResult.getDisplayName();

String Account=reportResult.getAccount();

String reportName= reportResult.getReportName();

boolean flag=reportResult.isRight();

System.out.println(“别名:”+displayName);

System.out.println(“ACount:”+Account);

System.out.println(“报表名:”+reportName);

System.out.println(“是否有权限:”+flag);

//测试:

//http://localhost:9090/appsOnlineUms/index.jsp?token=b96335b0db0347bf9b98c4fb2a3fdb38


//http://localhost:9090/appsOnlineUms/index.jsp?token=b96335b0db0347bf9b98c4fb2a3fdb36


System.exit(0);

ReportRightsSoap.java代码如下:

package com;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebResult;

import javax.jws.WebService;

import javax.jws.soap.SOAPBinding;

import org.tempuri.ReportRightResult;

@WebService(name = “ReportRightsSoap”, targetNamespace = “http://tempuri.org/”)

@SOAPBinding(use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)


public interface ReportRightsSoap {

@WebMethod(operationName = “GetRight”, action = “http://tempuri.org/GetRight”)

@WebResult(name = “GetRightResult”, targetNamespace = “http://tempuri.org/”)

public ReportRightResult getRight(

@WebParam(name = “token”, targetNamespace = “http://tempuri.org/”)

String token);

5.根据调用的WebServices对其返回的ReportRightResult结果集得到相关的信息

ReportRightResult reportResult=service.getRight(token);

String displayName= reportResult.getDisplayName();//别名

String Account=reportResult.getAccount();//ACount

String raq= reportResult.getReportName();//报表名

boolean flag=reportResult.isRight();//是否有权限

session.setAttribute(“flag”, flag);

6.由返回的权限判断通过Filter进行页面和数据的过滤

OnlineFilter.java的代码:

package filter;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.*;

public class OnlineFilter extends HttpServlet implements Filter {

private static final long serialVersionUID = 1L;

// private String loginUrl = “”;

public void init(FilterConfig filterConfig) throws ServletException {

// loginUrl = filterConfig.getInitParameter(“exceptUrl”);

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException,

NullPointerException {

RequestDispatcher dispatcher = request

.getRequestDispatcher(“myErrorPage.jsp”);

HttpServletRequest req = (HttpServletRequest) request;

HttpServletResponse res = (HttpServletResponse) response;

HttpSession session = req.getSession(true);

// 从session里取的权限判断信息

boolean flag = (Boolean) session.getAttribute(“flag”);

System.out.println(“flag:” + flag);

if (!flag) {

// 跳转到登陆页面

dispatcher.forward(request, response);

res.setHeader(“Cache-Control”, “no-store”);

res.setDateHeader(“Expires”, 0);

res.setHeader(“Pragma”, “no-cache”);

System.out.println(“用户没有登陆,不允许操作”);

return;

} else {

chain.doFilter(request, response);

System.out.println(“用户已经登陆,允许操作”);

public void destroy() {

過濾器在web.xml配置如下:

<filter>

<filter-name>onlineFilter</filter-name>

<filter-class>filter.OnlineFilter</filter-class>

<!–

<init-param>

<param-name>exceptUrl</param-name>

<param-value>index.jsp</param-value>

</init-param>

–>

</filter>

<filter-mapping>

<filter-name>onlineFilter</filter-name>

<url-pattern>/reportJsp/*</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>onlineFilter</filter-name>

<url-pattern>/jsp/*</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>onlineFilter</filter-name>

<url-pattern>/reportServlet</url-pattern>

</filter-mapping>

7.通过获取的权限最终达到数据的完整交互 index.jsp部分代码:

<%

String realPath = “http://”

+ request.getServerName()

+ “:”

+ request.getServerPort()

+ request.getContextPath()

+ request.getServletPath().substring(0,

request.getServletPath().lastIndexOf(“/”) + 1);

String fullfilePath = realPath + “reportJsp/showReport.jsp?raq=”

+ raq;

System.out.println(“fullfilePath:” + fullfilePath);

response.sendRedirect(fullfilePath);

%>

优点:1.权限安全系数更高,只保证当前用户有权限操作,防止了部分通过新开IE记住URL的方式访问,包括

想通过查看源文件里对servlet的处理等,

2.权限的配置,操作完全交给.net系统处理,对报表的应用只要告诉我有没有权限执行当前的操作,要用的报

表,当前的用户信息即可,通用性好,耦合度低,易于集成

缺点:由于是跨语言,跨服务器集成操作,多多少少网络可能会阻止一些访问效率和响应时间等

难点:对WebServices代码的操作过程…

非J2EE部署解决方案的更多相关文章

  1. Eclipse(非J2EE版本)配置Extjs环境以及安装部署Tomcat

    Eclipse(非J2EE版本)配置Extjs环境(Spket) 1. 安装spket插件,帮助->安装新软件->http://www.agpad.com/update. 2. 设置Spk ...

  2. 部署解决方案包 (SharePoint Server 2010)

    转:http://technet.microsoft.com/zh-cn/library/cc262995(v=office.14).aspx 本文介绍各个解决方案包,及其在 Microsoft Sh ...

  3. 【G】开源的分布式部署解决方案(一) - 开篇

    做这个开源项目的意义是什么?(口水自问自答,不喜可略过) 从功能上来说,请参考 预告篇,因自知当时预告片没有任何含金量,所以并没有主动推送到首页,而是私下的给一些人发的. 从个人角度上来说,我希望.n ...

  4. 【G】开源的分布式部署解决方案 - 预告篇

    为什么想到要做分布式部署解决方案? 当项目越做越大以后,你会发现部署变成一件极其头疼的事情.当然头疼的绝不仅仅在部署一个环节,比如新服务器环境搭建当中就许多坑要踩.各种重复性的工作,包括但不仅限于增加 ...

  5. 【G】开源的分布式部署解决方案(三) - 一期规划定稿与初步剖析

    G.系列导航 [G]开源的分布式部署解决方案 - 预告篇 [G]开源的分布式部署解决方案(一) - 开篇 [G]开源的分布式部署解决方案(二) - 好项目是从烂项目基础上重构出来的 [G]开源的分布式 ...

  6. 【G】开源的分布式部署解决方案文档 - 手动安装

    G.系列导航 [G]开源的分布式部署解决方案 - 导航 序言 因各种原因,决定先写使用文档.也证明下项目没有太监.至于安装过程复杂,是因为还没有做一键安装,这个现阶段确实没精力. 项目进度 (点击图片 ...

  7. 【G】开源的分布式部署解决方案文档 - 使用手册

    G.系列导航 [G]开源的分布式部署解决方案 - 导航 已知问题 导航没有联动 因为权限只是做了基础的登录校验,考虑到后面导航要跟权限关联上暂时是写死的. 只有部分界面使用了Vue.js 因为刚开始没 ...

  8. 【G】开源的分布式部署解决方案文档 - Web Deploy

    G.系列导航 [G]开源的分布式部署解决方案 - 导航 微软官方部署方式 右键项目->发布 这个大家应该再熟悉不过,在部署前有个预览界面可以看本次更新到底更新哪些文件. 既然它可以预览部署结果, ...

  9. 【G】开源的分布式部署解决方案文档 - 部署Console & 控制负载均衡 & 跳转持续集成控制台

    G.系列导航 [G]开源的分布式部署解决方案 - 导航 设置项目部署流程 项目类型:选择Console,这个跟功能无关,只是做项目分类,后面会有后续功能 宿主:选择Console 部署方式:选择原始, ...

随机推荐

  1. Visual Studio和eclipse的大小写转换快捷键

    Visual Studio: 转小写:ctrl + u 转大写:  ctrl + shift + u eclipse: 转小写:  ctrl + shift + y 转大写:  ctrl + shif ...

  2. 微信小程序web-view(webview) 嵌套H5页面 唤起微信支付的实现方案

    场景:小程序页面有一个web-view组件,组件嵌套的H5页面,要唤起微信支付. 先讲一下我的项目,首先我是自己开发的一个H5触屏版的商城系统,里面含有购物车,订单支付等功能.然后刚开始,我们公众号里 ...

  3. 再学Java 之 形参个数可变函数

    自Java 5后,Java允许定义形参个数可变的方法,从而允许运行过程中,为方法指定不确定个数的形参. 其定义方法的格式如下: void function_name ( type ... variab ...

  4. Filter应用之-验证用户是否已经登录

    过滤器: public class LoginFilter implements Filter{ @Override public void init(FilterConfig filterConfi ...

  5. 【Java并发编程】:并发新特性—Lock锁和条件变量

    简单使用Lock锁 Java5中引入了新的锁机制——Java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作.Lock接 ...

  6. 虚拟网络编辑器的知识和出现的一些问题(没有VMnet0或VMnet8)

    不多说,直接上干货! 安装好的虚拟机,没有VMnet0!!! 解决的办法: 就可以了. 那么,问题现在又来了? 但是,每次都要这样,以右键,管理员身份运行,再关闭之后,以普通双击方式,即又没有VMne ...

  7. 业务ID 生成策略

    业务ID 生成策略,从技术上说,基本要借助一个集中式的引擎来帮忙实现. 为了扩大业务ID生成策略的并发问题,还有更为技巧性的提升. 先来介绍普遍的分布式ID生成策略: 1. 利用DB的自增主键 这里又 ...

  8. 深入理解Java虚拟机:第2章 Java内存区域与内存溢出异常

    目录 2.2 运行时数据区域 Java堆 方法区 虚拟机栈 本地方法栈 程序计数器 2.3 HotSpot虚拟机对象探秘 对象的创建 对象的内存布局 对象的访问定位   2.2 运行时数据区域 Jav ...

  9. vim shortcut

    1.vim ~/.vimrc 进入配置文件 如果不知道vimrc文件在哪,可使用 :scriptnames 来查看 set nu #行号 set tabstop=4 #一个tab为4个空格长度 set ...

  10. bzoj 4912: [Sdoi2017]天才黑客

    Description Solution 这个题和点没什么关系 , 之和边与边之间关系有关 , 我们就把边看作点 , 边权就是 \(lcp\) , 点权看作这条边本来的权值. 现在考虑两两连边 , \ ...