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代码的操作过程…
  • 相关阅读:
    BZOJ 1391: [Ceoi2008]order
    BZOJ 4504: K个串
    2019 年百度之星·程序设计大赛
    POJ 2398 Toy Storage (二分 叉积)
    POJ 2318 TOYS (二分 叉积)
    HDU 6697 Closest Pair of Segments (计算几何 暴力)
    HDU 6695 Welcome Party (贪心)
    HDU 6693 Valentine's Day (概率)
    HDU 6590 Code (判断凸包相交)
    POJ 3805 Separate Points (判断凸包相交)
  • 原文地址:https://www.cnblogs.com/shiGuangShiYi/p/10117538.html
Copyright © 2011-2022 走看看