CAS在tomcat上为Oracle APEX获取属性

我将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中使用它的地方?

非常感谢您

wkao0705120104 回答:CAS在tomcat上为Oracle APEX获取属性

我自己创建了解决方案。

  1. 创建一个处理来自CAS的属性的Java Servlet,并返回一个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编译为.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>

,现在可以在{host}:{port} / {APP_NAME} / {PATH}

上使用servlet。
  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");
本文链接:https://www.f2er.com/3110551.html

大家都在问