一、登录页面替换
替换页面:**casLoginView.jsp**
<!DOCTYPE html>
<%@ page session="true" %>
<%@ page pageEncoding="UTF-8" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<!-- Title and other stuffs -->
<title>单点登录</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="">
<link href="res/style.css" rel="stylesheet">
<link href="res/layui/css/layui.css" rel="stylesheet" >
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/3.2.1/css/font-awesome.min.css">
<!-- JS -->
<script src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js"></script>
<!-- HTML5 Support for IE -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/3.7.3/html5shiv.min.js"></script>
<![endif]-->
<script src="res/layui/layui.js" charset="utf-8"></script>
<script src="res/check.js" charset="utf-8"></script>
</head>
<body>
<!-- Form area -->
<div class="admin-form">
<div class="row">
<div class="col-md-12">
<!-- Widget starts -->
<div class="widget worange">
<!-- Widget head -->
<div class="widget-head">
<i class="icon-lock"></i> 登陆
</div>
<div class="widget-content">
<div class="padd">
<!-- Login form -->
<form:form method="post" id="fm1" cssClass="form-horizontal" commandName="${commandName}" htmlEscape="true">
<!-- Username -->
<div class="form-group">
<label class="control-label col-lg-3" for="username">账户</label>
<div class="col-lg-9">
<input type="text" class="form-control" id="username" name="username" value="${username}"
placeholder="用户名/邮箱/手机号">
</div>
</div>
<!-- Password -->
<div class="form-group">
<label class="control-label col-lg-3" for="password">密码</label>
<div class="col-lg-9">
<input type="password" class="form-control" id="password" name="password" placeholder="请输入密码">
</div>
</div>
<div class="form-group">
<div class="col-lg-9 col-lg-offset-2">
<div class="checkbox">
<label>
<input type="checkbox"> 记住密码
</label>
<label style="color: #d9534f;">${msg}</label>
</div>
</div>
</div>
<input type="hidden" name="isNeedValid" value="true" />
<input type="hidden" name="lt" value="${loginTicket}" />
<input type="hidden" name="execution" value="${flowExecutionKey}" />
<input type="hidden" name="_eventId" value="submit" />
<div class="col-lg-9 col-lg-offset-2">
<button type="submit" onclick="return check(this.form);" class="btn btn-danger">登陆</button>
<button type="reset" class="btn btn-default" >重置</button>
</div>
<br />
</form:form>
</div>
</div>
<div class="widget-foot">
没有账号? <a href="#">立即注册</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
前端验证JS:check.js
layui.use('layer', function(){
var layer = layui.layer;
});
//用户登录时的校验
function check(form){
if(form.username.value==''){
layer.tips("请输入用户名","#username");
location.href="#username";
return false;
}
if(form.password.value==''){
layer.tips("请输入密码","#password");
location.href="#password";
return false;
}
return true;
}
页面效果:
二、多页面
2.1、关键配置解读
login-webflow.xml —登录流程表单,注意:**casLoginView**
<view-state id="viewLoginForm" view="casLoginView" model="credential">
<binder>
<binding property="username" />
<binding property="password" />
</binder>
<on-entry>
<set name="viewScope.commandName" value="'credential'" />
</on-entry>
<transition on="submit" bind="true" validate="true" to="realSubmit">
<evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credential)" />
</transition>
</view-state>
default_views.properties —视图具体配置及对应页面,注意:**casLoginView.jsp**
casLoginView.(class)=org.springframework.web.servlet.view.JstlView
casLoginView.url=/WEB-INF/view/jsp/default/ui/casLoginView.jsp
cas.properties —视图解析配置文件引入,注意:**default_views**
cas.viewResolver.basename=default_views
cas-servlet.xml —视图解析器,注意:**${cas.viewResolver.basename}**
<!-- View Resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"
p:order="0">
<property name="basenames">
<util:list>
<value>${cas.viewResolver.basename}</value>
<value>protocol_views</value>
</util:list>
</property>
</bean>
总结: 也就是通过登录流程上配置视图对象,来控制页面指向它想要的登录页面casLoginView.jsp 若要实现多页面动态可变: 1、增加对应的登录页面,并注册到视图解析器中 2、动态改变登录流程上-视图对象的值 3、如何区分去跳到不同页面:根据登录地址上layout的值区分
2.2、具体实现
a、添加页面
WEB-INF/view/jsp/custom(custom为新建文件夹)目录下: 分别建两个登录页面custom1.jsp、custom2.jsp 注意两个页面要与之前页面要明显区分,不然看不出效果
b、增加视图配置
resources目录下: 建一个我们自定义的配置文件:custom_views.properties 参考default_views.properties增加两组视图配置
### Login view (/login)
#注意不要和其他视图重复:layout+CasLoginView的命名方式
#自定义登录页面1
custom1CasLoginView.(class)=org.springframework.web.servlet.view.JstlView
custom1CasLoginView.url=/WEB-INF/view/jsp/custom/custom1.jsp
#自定义登录页面1
custom2CasLoginView.(class)=org.springframework.web.servlet.view.JstlView
custom2CasLoginView.url=/WEB-INF/view/jsp/custom/custom2.jsp
c、视图解析器新增自定义配置文件
cas-servlet.xml
<!-- View Resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"
p:order="0">
<property name="basenames">
<util:list>
<value>${cas.viewResolver.basename}</value>
<value>custom_views</value><!--我们自己的配置文件-->
<value>protocol_views</value>
</util:list>
</property>
</bean>
d、增加视图转换控制方法
cas-servlet.xml
<bean id="switchLoginViewAction" class="com.mac.sso.flow.SwitchLoginViewAction"/>
代码实现
package com.mac.sso.flow;
import org.springframework.webflow.core.collection.ParameterMap;
import org.springframework.webflow.execution.RequestContext;
/**
* 根据请求参数自动更换登录页面
* layout=?
*/
public class SwitchLoginViewAction {
String defultview="casLoginView";
public final String checkLoginView(RequestContext context) {
ParameterMap requestParameters = context.getRequestParameters();
String layout = requestParameters.get("layout");
System.out.println("layout="+layout);
if(layout==null||"".equals(layout)){
return defultview;
}
//规则暂定这样
return layout+"CasLoginView";
}
}
e、登录表单的视图参数动态获取
login-webflow.xml —登录流程表单 注意:**#{switchLoginViewAction.checkLoginView(flowRequestContext)} **
<!--casLoginView改为动态获取-->
<view-state id="viewLoginForm" view="#{switchLoginViewAction.checkLoginView(flowRequestContext)}" model="credential">
<binder>
<binding property="username" />
<binding property="password" />
</binder>
<on-entry>
<set name="viewScope.commandName" value="'credential'" />
</on-entry>
<transition on="submit" bind="true" validate="true" to="realSubmit">
<evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credential)" />
</transition>
</view-state>
2.3、演示效果
三个登录地址登录页面分别为三个页面 http://localhost:8080/login http://localhost:8080/login?layout=custom1 http://localhost:8080/login?layout=custom2
2.4、新增页面规则
**
custom_views.properties下新增:
custom2CasLoginView.(class)=org.springframework.web.servlet.view.JstlView
custom2CasLoginView.url=/WEB-INF/view/jsp/custom/custom2.jsp
WEB-INF/view/jsp/custom/目录下新增: custom2.jsp登录页面
下一篇:登录验证码