【问题标题】:CAS getting attributes to Oracle APEX on tomcatCAS 在 tomcat 上获取 Oracle APEX 的属性
【发布时间】:2019-11-13 11:24:32
【问题描述】:

我将 Oracle Application Express 配置为具有基于 HTTP 标头变量的身份验证模式。

更具体地说,它基于remote_user,它设置为域登录,这要归功于与CAS的连接。

现在我需要获取属性。我知道Java中的方法怎么做:

AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
final Map attributes = principal.getAttributes();

问题是否有其他可能性可以使用 java 接收此属性(我可以在 Oracle Application Express 中使用的代码),例如JavaScript...

或者也许有一种方法可以在 APEX 中使用 Java 代码?我使用 APEX-ORDS-TOMCAT 系统,有类似的东西:

.../webapps/${app_name}/WEB-INF/classes and .../webapps/${app_name}/WEB-INF/lib

也许这是我可以放置一些 java .class 并在 Oracle APEX 中以某种方式使用它的地方?

非常感谢任何帮助

【问题讨论】:

    标签: java tomcat oracle-apex cas


    【解决方案1】:

    我自己创建了解决方案。

    1. 创建处理来自 CAS 的属性并返回 JSON 对象 (doGet) 的 Java Servlet:
    AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
    final Map attributes = principal.getAttributes();
    
    JSONObject jsonObj = new JSONObject(attributes);
    
    PrintWriter out = response.getWriter();
    
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    
    out.print(jsonObj);
    

    将.java编译成.class并放入文件夹:

    ${TOMCAT_BASE}/webapps/${APP_NAME}/WEB-INF/classes/${PACKAGE_NAME}
    
    1. 将 CAS、JSON、Servlet 库放入
    ${TOMCAT_BASE}/webapps/${APP_NAME}/WEB-INF/lib
    

    库列表(版本可以不同):

    json-20190722.jar
    javax.servlet-api-4.0.1.jar
    cas-client-core-3.6.1.jar
    cas-client-support-saml-3.4.1.jar
    commons-logging-1.1.1.jar
    joda-time-2.10.4.jar
    log4j-1.2.17.jar
    slf4j-api-1.7.28.jar
    slf4j-simple-1.7.25.jar
    
    1. 配置 web.xml 以使用此 servlet
        <servlet>
            <servlet-name>SERVLET_NAME</servlet-name>
            <servlet-class>${PACKAGE_NAME}.{CLASS_NAME}</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>SERVLET_NAME</servlet-name>
            <url-pattern>/{PATH}</url-pattern>
        </servlet-mapping>
    

    现在 servlet 在 {host}:{port}/{APP_NAME}/{PATH} 上可用

    1. 我们可以使用 JavaScript 从 APEX 访问它,例如将 json 发送到 item.value 的函数
    function loadJSON(itemName) {
      var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          document.getElementById(itemName).value = this.responseText
        }
      };
      xhttp.open("GET", "{PATH}", true);
      xhttp.send();
    }
    loadJSON("P1_USER_INFO");
    

    【讨论】:

    • {path} 是否暴露给所有人?
    • 嗯,为什么不应该这样?嗯,有没有可能对 evryone 隐藏它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 2012-06-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多