cas-server-4.0.0-release\cas-server-4.0.0\modules
目录下cas-server-webapp-4.0.0.war
,将其改名为cas.war
放入tomcat目录下的webapps下。启动tomcat自动解压war包。浏览器输入http://localhost:8080/cas/login ,可看到登录页面我们使用CAS时是无需编码的,一切需要根据我们项目作出调整的需求都可更改相应的配置文件来实现。
casuser
,密码Mellon
,按此登录方可登录成功。此通行逻辑源于webapps/cas/WEB-INF/deployerConfigContext.xml
文件中的配置:
你可以增加一个entry
来增加一个通行证(如我增加了tom
)。修改配置文件后别忘了重启tomcat以使其生效。
/logout
为登出url,即请求localhost:8080/cas/logout
即可注销当前浏览器在CAS中的登录。如果我们不希望用8080端口访问CAS, 可以修改端口,需更改两处配置:
conf\server.xml
找到下面的配置,更改端口号(如9100)
webapps/cas/WEB-INF/cas.properties
server.name=http://localhost:9100
CAS默认使用的是HTTPS协议,如果使用HTTPS协议需要SSL安全证书(需向特定的机构申请和购买) 。如果对安全要求不高或是在开发测试阶段,可使用HTTP协议。我们这里讲解通过修改配置,让CAS使用HTTP协议。
这里需要增加参数p:requireSecure="false"
,requireSecure属性意思为是否需要安全验证,即HTTPS,false为不采用
/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml
,找到下面配置:
参数p:cookieSecure="true"
,同理为HTTPS验证相关,TRUE为采用HTTPS验证,FALSE为不采用https验证。参数p:cookieMaxAge="-1"
,是cookie的最大生命周期,-1
为无生命周期,即只在当前打开的窗口有效,关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意窗口,都不需要验证。我们这里将cookieSecure
改为false , cookieMaxAge
改为3600
WEB-INF/spring-configuration/warnCookieGenerator.xml
,找到下面配置
我们这里将cookieSecure
改为false , cookieMaxAge
改为3600
搭建工程引入依赖
创建Maven工程 (war)casclient_demo1
引入cas客户端依赖并指定tomcat运行端口为9001
org.jasig.cas.client
cas-client-core
3.3.3
javax.servlet
servlet-api
2.5
provided
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
1.7
1.7
org.apache.tomcat.maven
tomcat7-maven-plugin
9001
/
添加WEB-INF/web.xml
,添加配置如下:
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
CAS Single Sign Out Filter
org.jasig.cas.client.session.SingleSignOutFilter
CAS Single Sign Out Filter
/*
CASFilter
org.jasig.cas.client.authentication.AuthenticationFilter
casServerLoginUrl
http://localhost:9100/cas/login
serverName
http://localhost:9001
CASFilter
/*
CAS Validation Filter
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
casServerUrlPrefix
http://localhost:9100/cas
serverName
http://localhost:9001
CAS Validation Filter
/*
CAS HttpServletRequest Wrapper Filter
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
CAS HttpServletRequest Wrapper Filter
/*
CAS Assertion Thread Local Filter
org.jasig.cas.client.util.AssertionThreadLocalFilter
CAS Assertion Thread Local Filter
/*
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
一品优购
欢迎来到一品优购,<%=request.getRemoteUser()%>
request.getRemoteUser()为获取远程登录名
casclient_demo2
引入cas客户端依赖并制定tomcat运行端口为9002
web.xml
,参照casclient_demo1
,将serverName
(cas客户端IP)的值改为http://localhost:9002,一共两处index.jsp
,内容显示“欢迎来到二品优购”9001
和9002
工程的页面链接中以实现单点登出欢迎来到一品优购,<%=request.getRemoteUser()%>。
点击退出
我们更希望退出登录后,能自动跳转到某个页面,那如何处理呢?
WEB-INF/cas-servlet.xml
中的${cas.logout.followServiceRedirects:true}
这样在cas客户端的登出url中加上回调URL即可
退出登录
tb_user
里做验证WEB-INF
下deployerConfigContext.xml
,在末尾
前添加如下配置
其中
这一配置是使用固定的用户名和密码进行认证。就像我们之前配的tom,123
:
要想使用数据库表做动态认证,需要注释此行配置,改为我们添加的数据库认证处理器:
<1-- -->
需要注意的是,我们添加的c3p0、md5加密、根据数据源进行认证的
dbAuthHandler
需要引入3个依赖到WEB-INF/lib
下
- c3p0-0.9.1.2.jar
- cas-server-support-jdbc-4.0.0.jar
- mysql-connector-java-5.1.32.jar
tb_user
表中的数据做登录测试login.html
拷贝到cas系统下webapp\cas\WEB-INF\view\jsp\default\ui
目录下css
js
等文件夹拷贝到 webapp/cas
目录下casLoginView.jsp
改名为casLoginView-origin.jsp
(留作参照),将login.html
改名为casLoginView.jsp
修改casLoginView.jsp
(参照casLoginView-origin.jsp
)
<%@ 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" %>
......
测试:输入错误的用户名和密码,提示是英文。这个提示信息是在cas\WEB-INF\classes
目录下的messages.properties
文件中 :
authenticationFailure.AccountNotFoundException=Invalid credentials.
authenticationFailure.FailedLoginException=Invalid credentials.
设置国际化为zn_CN ,修改WEB-INF\cas-servlet.xml
:
我们在WEB-INF/classes/messages_zh_CN.properties
下增加如下配置(中文转码为UTF-8):
authenticationFailure.AccountNotFoundException=\u7528\u6237\u4E0D\u5B58\u5728.
authenticationFailure.FailedLoginException=\u5BC6\u7801\u9519\u8BEF.
第一个是用户名不存在时的错误提示
第二个是密码错误的提示
(1)建立Maven项目casclient_demo3
,引入spring依赖和spring secrity 相关依赖 ,tomcat端口设置为9003
org.springframework
spring-core
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework.security
spring-security-web
4.1.0.RELEASE
org.springframework.security
spring-security-config
4.1.0.RELEASE
javax.servlet
servlet-api
2.5
provided
org.jasig.cas.client
cas-client-core
3.3.3
org.apache.tomcat.maven
tomcat7-maven-plugin
9003
/
(2)建立web.xml
:
contextConfigLocation
classpath:spring/spring-security.xml
org.springframework.web.context.ContextLoaderListener
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
(3)创建配置文件spring-security.xml
spring-security.xml
添加/login.html
和/index.html
测试SpringSecurity
搭建是否成功
欢迎光临
(1)引入CAS客户端、SpringSecurity整合CAS的依赖
org.springframework.security
spring-security-cas
4.1.0.RELEASE
org.jasig.cas.client
cas-client-core
3.3.3
org.slf4j
log4j-over-slf4j
(2)修改spring-security.xml如下(把9001中web.xml中的配置移到了spring配置,并把SpringSecurity认证的提供指定为cas):
(3)创建UserDetailsServiceImpl
/**
* 认证类
*/
public class UserDetailServiceImpl implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//拿用户名到数据库查询用户的事CAS系统帮你做了
//构建角色集合
List authorities=new ArrayList();
//TODO 应该从数据库查询该用户权限的,这里作为demo简化,直接赋值
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
return new User(username, "" , authorities);
}
}
这个类的主要作用是在登陆后得到用户名,可以根据用户名查询角色或执行一些逻辑。 如通过
SecurityContextHolder
获取用户名。
UserDetailServiceImpl
已经帮我们保存了登录名,只需建立一个Controller
并通过SecurityContextHolder
获取返回给前端。要想退出登录(http://localhost:9100/cas/logout)后调往指定页面,则需修改spring-security.xml
,如下面调往http://localhost:9003/index2.html:
...
在页面上添加链接,退出登录将跳往index2.html
退出登录
创建index2.html
,将index2.html
设置为可匿名访问
别名 | Filter 类 |
---|---|
CHANNEL_FILTER | ChannelProcessingFilter |
SECURITY_CONTEXT_FILTER | SecurityContextPersistenceFilter |
CONCURRENT_SESSION_FILTER | ConcurrentSessionFilter |
LOGOUT_FILTER | LogoutFilter |
X509_FILTER | X509AuthenticationFilter |
PRE_AUTH_FILTER | AstractPreAuthenticatedProcessingFilter 的子类 |
CAS_FILTER | CasAuthenticationFilter |
FORM_LOGIN_FILTER | UsernamePasswordAuthenticationFilter |
BASIC_AUTH_FILTER | BasicAuthenticationFilter |
SERVLET_API_SUPPORT_FILTER | SecurityContextHolderAwareRequestFilter |
JAAS_API_SUPPORT_FILTER | JaasApiIntegrationFilter |
REMEMBER_ME_FILTER | RememberMeAuthenticationFilter |
ANONYMOUS_FILTER | AnonymousAuthenticationFilter |
SESSION_MANAGEMENT_FILTER | SessionManagementFilter |
EXCEPTION_TRANSLATION_FILTER | ExceptionTranslationFilter |
FILTER_SECURITY_INTERCEPTOR | FilterSecurityInterceptor |
SWITCH_USER_FILTER | SwitchUserFilter |
更多学习资源请上白玉搜一搜