有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java CAS在tomcat上获取Oracle APEX的属性

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

更具体地说,它基于远程用户,由于与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的地方。类并在Oracle APEX中以某种方式使用它

非常感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

    我自己创造了解决方案

    1. 创建一个Java Servlet,用于处理来自CAS的属性并返回一个JSON对象(doGet):
    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到。类并将其放入文件夹:

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

    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. 配置网络。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从顶点到达它,例如一个将json发送到项目的函数。价值观
    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");