cas+sso实现单点登录的步骤

刚接触这个东西,花了一天时间搞出这么一个demo,作为小新,我将步骤详细列出,希望对各位有所帮助


1.根据演示需求,用修改hosts 文件的方法添加域名最简单方便

(这个非常重要,因为CAS单点登录系统是基于JAVA安全证书的 https 访问, 要使用CAS单点登录必须要配置域名, cas是不能通过ip访问的.),
编辑文件 C:\Windows\System32\drivers\etc\hosts 在文件末端添加下面三条信息:

127.0.0.1 mycas.server.com
127.0.0.1 mycas.client1.com
127.0.0.1 mycas.client2.com






**********************************   服务端   *************************************************************************************************************




若不想配置证书等https的安全协议,而是用http,则只需要配置如下文件即可


CAS默认使用HTTPS协议,如果对安全要求不高,可使用HTTP协议。


修改为HTTP协议的步骤如下:


修改tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml 增加参数p:requireSecure="false",意为:不需要安全验证。


<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient"  
p:requireSecure="false"/>  


修改 ticketGrantingTicketCookieGenerator.xml (路径:cas/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml)中 
ticketGrantingTicketCookieGeneratorp:cookieSecure 属性的值改为 false。
<bean id="ticketGrantingTicketCookieGenerator"class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"  
p:cookieSecure="false"p:cookieMaxAge="-1" p:cookieName="CASTGC"p:cookiePath="/cas" />  


配置完成后直接完成下面第5步后完成服务端的部署




















2.生成信任证书


tomcat自带的keytool生成信任证书


keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass 123456 -validity 365 -keystore f:\sso\ssodemo.keystore -storepass 123456


注意:这一步输入你的名字与姓氏时,将 mycas.server.com 输入,这里的 storepass 与keypass 必须一致,我在此设密码为123456


信任证书导出
keytool -export -alias ssodemo -keystore f:\sso\ssodemo.keystore -file f:\sso\ssodemo.crt -storepass 123456


信任证书导入到客户端
把%JAVA_HOME%/jre/lib/security/cacerts文件移出c盘(可以暂时放在桌面,我放在证书的目录里),否则无法访问 下面的命令执行完后再移进去
keytool -import -trustcacerts -alias tomcat -keystore f:\sso\cacerts -file f:\sso\ssodemo.crt -alias ssodemo




注意:若提示密码输入错误时,输入changeit




3.部署CAS-Server相关的Tomcat


  1.找到tomcat/conf/server.xml
  2.找到已被注释的下面代码(一般都是在83行)
<!--
    <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
-->

去掉注释,修改为以下代码


<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    keystoreFile="f:\sso\ssodemo.keystore" 
keystorePass="123456"
    clientAuth="false" sslProtocol="TLS" />


注意:keystoreFile 为生成信任证书时的文件路劲,keystorePass则是生成证书时的密码




4.测试tomcat配置是否成功(如果熟练有信心的大神则直接跳过此步)
https://mycas.server.com:8443/






5.部署CAS-Server
  本文以cas-server-webapp-4.0.0.rar为例,解压提取cas-server-webapp-4.0.0.war文件,把改文件copy到E:\apache-tomcat-7.0.57\webapps 目下,并重命名为:cas.war。
启动tomcat,在浏览器地址栏输入:https://mycas.server.com:8443/cas ,回车,出现CAS服务端的登录验证首页:






6.配置cas的配置文件 (tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml)


   (1)以下这段配置的是默认的账户名和密码 此处配置自己的mysql数据库,故这段代码注释掉
<bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
    <property name="users">
        <map>
            <entry key="casuser" value="Mellon"/>
        </map>
    </property>
</bean>


   (2)上面代码注释掉之后,在后面添加下面代码
<!-- 指定c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver" />
    <property ame="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/myProject?useUnicode=true&amp;characterEncoding=UTF-8" />
    <property name="user" value="root" />
    <property name="password" value="root" />
</bean>
    
<!-- 访问本地数据库 -->
<bean id="dbAuthHandler"
      class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
      p:dataSource-ref="dataSource"
      p:sql="SELECT u.`password` FROM `sec_user` u WHERE u.`account` = ?" />


   (3)找到下面这段配置
<constructor-arg>
  <map> 
    <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />


        <!-- 注释这个-->
        <!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />-->


    <!-- key-ref指定自己的本地数据库访问 -->
    <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>
    </map>
  </constructor-arg>




注意,需要导入jar包:
c3p0-0.9.1.2.jar、cas-server-support-jdbc-4.0.0.jar、mysql-connector-java-5.1.13-bin.jar、mchange-commons-0.2
这3个缺一不可。将这3个jar放到E:\apache-tomcat-7.0.57\webapps\cas\WEB-INF\lib目录下。




-----------------------  上述服务端已经配置完成  ---------------------------------










************************************************************  客户端的配置  ***************************************************************************




1.导入jar包
   cas-client-core-3.2.1.jar,
   commons-logging-1.1.jar
  上述两个jar包在下载的cas-client的解压包里modules目录下有




2.修改tomcat服务的端口号


<Server port="8005" shutdown="SHUTDOWN">  
<Connector port="8080" protocol="HTTP/1.1"  
  connectionTimeout="20000"  
  redirectPort="8443" />  
<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />  


参考修改如下
<Server port="18005" shutdown="SHUTDOWN">  
<Connector port="18080" protocol="HTTP/1.1"  
  connectionTimeout="20000"  
  redirectPort="18443" />  
<Connector port="18009" protocol="AJP/1.3"redirectPort="18443" /> 






3.在web.xml中配置如下



<!-----------------单点登录开始---------------------------->  
                <!--用于单点退出,该过滤器用于实现单点登出功能,可选配置-->  
                <listener>  
                        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>  
                </listener>  
<!--该过滤器用于实现单点登出功能,可选配置。 -->  
                <filter>  
                        <filter-name>CASSingle Sign Out Filter</filter-name>  
                        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>  
                </filter>  
                <filter-mapping>  
                        <filter-name>CASSingle Sign Out Filter</filter-name>  
                        <url-pattern>/*</url-pattern>  
                </filter-mapping>  
<filter>  
                        <filter-name>CASFilter</filter-name>  
                        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>  
                        <init-param>  
                                <param-name>casServerLoginUrl</param-name>  
                                <param-value>https://demo.micmiu.com:8443/cas/login</param-value>  
                        </init-param>  
                        <init-param>  
                                <param-name>serverName</param-name>  
                                <param-value>http://app1.micmiu.com:18080</param-value>  
                        </init-param>  
                </filter>  
                <filter-mapping>  
                        <filter-name>CASFilter</filter-name>  
                        <url-pattern>/*</url-pattern>  
                </filter-mapping>  
                <!--该过滤器负责对Ticket的校验工作,必须启用它 -->  
                <filter>  
                        <filter-name>CASValidation Filter</filter-name>  
                        <filter-class>  
                                org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>  
                        <init-param>  
                                <param-name>casServerUrlPrefix</param-name>  
                                <param-value>https://demo.micmiu.com:8443/cas</param-value>  
                        </init-param>  
                        <init-param>  
                                <param-name>serverName</param-name>  
                                <param-value>http://app1.micmiu.com:18080</param-value>  
                        </init-param>  
                </filter>  
                <filter-mapping>  
                        <filter-name>CASValidation Filter</filter-name>  
                        <url-pattern>/*</url-pattern>  
                </filter-mapping>  
<!--  
                        该过滤器负责实现HttpServletRequest请求的包裹,  
                        比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。  
                -->  
                <filter>  
                        <filter-name>CASHttpServletRequest Wrapper Filter</filter-name>  
                        <filter-class>  
                                org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>  
                </filter>  
                <filter-mapping>  
                        <filter-name>CASHttpServletRequest Wrapper Filter</filter-name>  
                        <url-pattern>/*</url-pattern>  
                </filter-mapping>  
<!--  
                该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。  
                比如AssertionHolder.getAssertion().getPrincipal().getName()。  
                -->  
                <filter>  
                        <filter-name>CASAssertion Thread Local Filter</filter-name>  
                        <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>  
                </filter>  
                <filter-mapping>  
                        <filter-name>CASAssertion Thread Local Filter</filter-name>  
                        <url-pattern>/*</url-pattern>  
                </filter-mapping>  
<!--------------------------------单点登录结束 ------------------------------->  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用EasyExcel导入Excel文件非常简单,只需要遵循以下步骤: 1. 在pom.xml文件中添加easyexcel依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.2</version> </dependency> ``` 2. 创建一个实体类来存储Excel表格中的数据。 ```java @Data public class ExcelData { private String name; private Integer age; private String email; } ``` 3. 创建一个Excel读取器类。 ```java public class ExcelReader { public static List<ExcelData> readExcel(String fileName) throws Exception { InputStream inputStream = new FileInputStream(fileName); ExcelReader excelReader = new ExcelReader(inputStream, null, new ExcelListener()); excelReader.read(); List<ExcelData> dataList = ((ExcelListener)excelReader.getEventListener()).getDataList(); inputStream.close(); return dataList; } } ``` 4. 创建一个Excel监听器类,用于处理Excel表格中的数据。 ```java public class ExcelListener extends AnalysisEventListener<ExcelData> { private List<ExcelData> dataList = new ArrayList<>(); @Override public void invoke(ExcelData excelData, AnalysisContext analysisContext) { dataList.add(excelData); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } public List<ExcelData> getDataList() { return dataList; } public void setDataList(List<ExcelData> dataList) { this.dataList = dataList; } } ``` 5. 在Controller中调用ExcelReader类的readExcel方法来读取Excel文件中的数据。 ```java @RestController public class ExcelController { @RequestMapping("/importExcel") public String importExcel(@RequestParam("file") MultipartFile file) { try { String fileName = file.getOriginalFilename(); List<ExcelData> dataList = ExcelReader.readExcel(fileName); // 处理数据 return "导入成功"; } catch (Exception e) { e.printStackTrace(); return "导入失败"; } } } ``` 这样就可以使用EasyExcel导入Excel文件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值