zoukankan      html  css  js  c++  java
  • 非J2EE部署解决方案

    
    根据交银施罗德真实环境已测试通过,此过程可以作为非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代码的操作过程…
  • 相关阅读:
    前端工程化
    前端模块化CommonJS&ES6
    为什么浮点型运算结果会有误差?
    RequestAnimationFrame知多少?
    CSS三栏布局
    秋招面试
    实现Storage
    Angular
    TypeScript
    微服务架构设计模式
  • 原文地址:https://www.cnblogs.com/shiGuangShiYi/p/10117538.html
Copyright © 2011-2022 走看看