OpenCms登录添加验证码功能
OpenCms是一个专业级别的开源网站内容管理系统,可以非常容易的帮助建立和管理复杂的网站而无需专业的HTML知识。它基于JAVA和XML语言技术,因此能完全融入到现有的系统内部。OpenCms可以非常好的运行在一个完全的开源环境中(例如:Linux、Apache、Tomcat、MySQL). 当然,也可以很好的运行于商业环境下(例如:Windows NT、IIS、BEA Weblogic、Oracle DB)。
1.环境
OpenCms版本:11.0.2
思路:修改OpenCms自带案例中的login.jsp
(路径:/system/modules/alkacon.mercury.template/functions/login.jsp),将其修改为带验证码验证功能的网页。
原始代码如下:
<%@page
pageEncoding="UTF-8"
buffer="none"
session="false"
import="org.opencms.main.*, org.opencms.file.*"
trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
<%@ taglib prefix="mercury" tagdir="/WEB-INF/tags/mercury" %>
<c:set var="setting" value="${cms.element.setting}" />
<c:set var="cssWrapper" value="${setting.cssWrapper}" />
<c:set var="loginproject" value="${setting.loginproject.isSet ? setting.loginproject.toString : 'Online'}" />
<c:set var="loginou" value="${setting.loginou.isSet ? fn:trim(cms.element.setting.loginou.toString) : ''}" />
<cms:secureparams />
<fmt:setLocale value="${cms.locale}" />
<cms:bundle basename="alkacon.mercury.template.messages">
<jsp:useBean id="loginBean" class="org.opencms.jsp.CmsJspLoginBean" scope="page">
<% loginBean.init(pageContext, request, response); %>
<c:choose>
<c:when test="${(param.action eq 'login') and (not empty param.loginName) and (not empty param.loginPassword)}">
<c:set var="loginresource">${
empty param.requestedResource ? cms.requestContext.uri : param.requestedResource}</c:set>
<c:set var="loginuri">${
cms.requestContext.siteRoot}${
loginresource}</c:set>
<c:set var="loginuser" value="${param.loginName}"/>
<c:set var="loginpassword" value="${param.loginPassword}"/>
<c:choose>
<c:when test="${not empty loginou}">
<c:set var="loginprincipal" value="${loginou eq '/' ? '' : loginou}${loginuser}"/>
<c:set var="ignore" value="${loginBean.login(loginprincipal, loginpassword, loginproject, loginresource)}" />
</c:when>
<c:otherwise>
<mercury:findorgunit uri="${loginuri}">
<c:set var="success" value="${false}" />
<c:forEach var="ou" items="${parentOUs}">
<c:if test="${not success}">
<c:set var="loginprincipal" value="${empty ou.name ? '' : '/'}${ou.name}${loginuser}"/>
<c:set var="ignore" value="${loginBean.login(loginprincipal, loginpassword, loginproject, loginresource)}" />
<c:set var="success" value="${loginBean.loggedIn}" />
</c:if>
</c:forEach>
</mercury:findorgunit>
</c:otherwise>
</c:choose>
</c:when>
<c:when test="${param.action eq 'logoff'}">
<c:set var="ignore" value="${loginBean.logout()}" />
</c:when>
</c:choose>
</jsp:useBean>
<c:set var="loginError" value="${not loginBean.loginSuccess}" />
<mercury:nl/>
<div class="element type-login-form ${cssWrapper}"><%----%>
<form class="styled-form" target="_self" method="post"><%----%>
<input type="hidden" name="requestedResource" value="${param.requestedResource}" /><%----%>
<c:choose>
<c:when test="${not loginBean.loggedIn}">
<header><%----%>
<fmt:message key="msg.page.login.loggedoff" />
</header><%----%>
<fieldset><%----%>
<section><%----%>
<label class="input ${loginError ? 'state-error' : ''}"><%----%>
<span class="icon-prepend fa fa-user"></span><%----%>
<input type="text" id="loginName" name="loginName" placeholder="<fmt:message key="msg.page.login.username" />"/><%----%>
</label><%----%>
</section><%----%>
<section><%----%>
<label class="input ${loginError ? 'state-error' : ''}"><%----%>
<span class="icon-prepend fa fa-lock"></span><%----%>
<input type="password" id="loginPassword" name="loginPassword" placeholder="<fmt:message key="msg.page.login.password" />"/><%----%>
</label><%----%>
<c:if test="${loginError}">
<em><fmt:message key="msg.page.login.failed" /></em><%----%>
</c:if>
</section><%----%>
</fieldset><%----%>
<footer><%----%>
<button class="btn" type="submit" name="action" value="login" ><fmt:message key="msg.page.login.login" /></button><%--