我将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中以某种方式使用它的地方?
非常感谢您的帮助
我自己创建了解决方案。
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}
${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
<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}]中使用>
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");