乐趣区

关于oracle:自定义OAM错误页面

背景

OAM 在登录出错时,会跳到 OAM 谬误页面,如图

该页面是 OAM 的规范谬误页面,十分的不敌对,当用户面对这么一个页面时,基本不晓得如何操作。上面介绍如何自定义该页面

实现

  • 下载oam-server.ear

登录 OAM 后盾,在目录 $MIDDLEWARE_HOME/Oracle_IAM1/oam/server/apps 目录下找到 oam-server.ear,将其下载到本地

MIDDLEWARE_HOME 是中间件目录,比方 /data/fmwhome/Oracle/Middleware/Oracle_IAM1/oam/server/apps

  • 批改页面

用解压软件(如 7 -zip 等)将 oam-server.ear 解压到目录下,如果没有解压软件间接用 jar 命令也能够解压

jar -xvf oam-server.ear

解压后,会有一个 ngsso-web.war 文件,以同样的办法将该文件解压进去,在门路 ngsso-web/pages 目录下,该目录蕴含了 OAM 所有规范的页面,以 jsp 形式提供,其中页面 defaultservererror.jsp 就是那个谬误页面,所以只需批改该页面即可。页面源码如下

<%@ page language="java" contentType="text/html" %>
<%@ page isErrorPage="true" import="java.io.*,oracle.security.am.engines.sso.ServerMsg" %>
<%@page import="oracle.security.am.common.utilities.constant.GenericConstants" %>
<%@page import="java.util.*, java.text.MessageFormat, oracle.security.am.engines.sso.ServerMsg"%>
<%@page import="oracle.security.am.common.utilities.css.XSSUtil" %>

<%@ include file="locale-ctx.jsp" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%!
public void jspInit(){oracle.security.am.pbl.transport.http.proxy.ServletCatalog.registerServlet("/pages/defaultservererror.jsp", this);
}
%>
<%
// if proxy loading, return immediately
if ("true".equals(request.getParameter("proxyloading")))
    return;
    
  //Set the Expires and Cache Control Headers
  response.setHeader("Cache-Control", "no-cache, no-store");
  response.setHeader("Pragma", "no-cache");
  response.setHeader("Expires", "0");
  //Added for Combating ClickJacking
  XSSUtil.addHeader(response, "");
  response.setContentType("text/html; charset=UTF-8");
 
  final String appName = request.getContextPath();
  //initializing the messageBundle first
  java.util.Locale myLocale = request.getLocale();
  String defaultResourceBundle = "oracle.security.am.engines.sso.ServerMsg";
  ResourceBundle msgBundle  = ResourceBundle.getBundle(defaultResourceBundle, myLocale);

  final String defaultErrorCode = "OAM-7";
  String simpleMessage = msgBundle.getString(defaultErrorCode);
  // if redirection due to error happened
  Object errCode = request.getAttribute(GenericConstants.ERROR_CODE);

  if(errCode != null) {
    try {simpleMessage = msgBundle.getString(errCode.toString());
    } 
    catch(Exception e) {//ignore. simpleMessage will be set to the default}
  }
    
%>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%=language%>" lang="<%=language%>"  dir="<%=textDirection%>">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title><%=msgBundle.getString("SSO")%></title>
    <link rel='stylesheet' href='<%=request.getContextPath()%>/pages/css/login_page<%=cssPrefix%>.css'/>
   <!--... 省略局部代码 -->
    </div>
</body>
</html>

能够将 html 局部代码批改如下

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta http-equiv="refresh" content="0; URL= 重定向的地址" />
</head>
</html>

将该页面重定向到指定页面,之所以倡议重定向而不是间接在 jsp 上进行批改是因为如果把页面写在 jsp 中,那么每次更新都须要重新部署 oam-server,如果是重定向到自定义页面就比拟灵便。

  • 从新打包

只需将批改后的 defaultservererror.jsp 文件笼罩 ear 中的 jsp 文件即可,能够间接用 7 -zip 软件关上oam-server.ear/ngsso-web.war/pages/,而后间接将新的 jsp 文件拖入间接笼罩保留即可,如果没有 7 -zip 能够用以下命令从新打包

jar -uvf ngsso-web.war pages/defaultservererror.jsp
jar -uvf oam-server.ear ngsso-web.war
  • 部署

将 oam-server.ear 上传到服务器,笼罩原 ear 文件即可(!!!!肯定要先备份原来的),另外须要删除所有 oamserver 下的 tmp 文件夹,位于$DOMAIN_HOME/servers/oam_server1\tmp

  • 重启

重启所有 oam manager server

退出移动版