cas 单点登录使用spring集成的ShaPasswordEncoder实现
来源:互联网 发布:ubuntu 挂载fat32 u盘 编辑:程序博客网 时间:2024/06/05 20:21
在本地生成证书
keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass password -validity 365 -keystore c:\password.keystore -storepass password
导出证书
keytool -export -alias ssodemo -keystore c:\password.keystore -file c:\password.crt -storepass password
客户端导出证书
keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file c:\ password.crt -alias ssodemo 说明:这里如果导入不成功javahome换成决定目录试试,密码不是上面设置的密码changeit
服务器端的设置
在E:\apache-tomcat-7.0.57\conf\server.xml目录找到类似的并替换掉
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="C:/password.keystore" keystorePass="password"
clientAuth="false" sslProtocol="TLS" />
>
5. 验证cas服务器是否正确启动
https://localhost:8443/
>
6. 添加的jar包
c3p0-0.9.1.2.jar、cas-server-support-jdbc-4.0.0.jar、mysql-connector-java-5.1.13-bin.jar拷贝到 E:\apache-tomcat-7.0.57\webapps\cas\WEB-INF\lib目录下。
>
7. 修改配置,修改E:\apache-tomcat-7.0.57\webapps\cas\WEB-INF\ deployerConfigContext.xml
首先添加数据源
<!-- 指定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&characterEncoding=UTF-8" /> <property name="user" value="root" /> <property name="password" value="root</bean>然后使用数据源,找到authenticationHandlers替换第二个bean <property name="authenticationHandlers"> <list> <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" /> <bean class="org.jasig.cas.authentication.handler.support.JdbcUsernamePasswordAuthHandlerImpl"> <property name="dataSource" ref="dataSource" /> </bean> </list> </property>
>
8. 由于数据库使用的ShaPasswordEncoder加密方式所以重新写密码验证方式
package org.jasig.cas.authentication.handler.support;import java.util.Map;import org.jasig.cas.adaptors.jdbc.AbstractJdbcUsernamePasswordAuthenticationHandler;import org.jasig.cas.authentication.handler.AuthenticationException;import org.jasig.cas.authentication.handler.UnknownUsernameAuthenticationException;import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;import org.springframework.dao.IncorrectResultSizeDataAccessException;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.security.authentication.encoding.PasswordEncoder;import org.springframework.security.authentication.encoding.ShaPasswordEncoder;import org.springframework.stereotype.Component;@Component("jdbcUsernamePasswordAuthHandlerImpl")public class JdbcUsernamePasswordAuthHandlerImpl extends AbstractJdbcUsernamePasswordAuthenticationHandler { /**在spring中集成的有三个实现类,我们使用ShaPasswordEncoder实现的类进行初始化 *这里其实可以使用注入的方式实现,但是我没有实现,只能使用这种低级的方法去初始化了 */ private PasswordEncoder passwordEncoder = new ShaPasswordEncoder(); private static final String QUERY_USER_SQL = "select SALT_,PASSWORD_ from t_user where USERNAME_ = ?"; protected boolean authenticateUsernamePasswordInternal(final UsernamePasswordCredentials credentials) throws AuthenticationException { final String username = credentials.getUsername(); final String password = credentials.getPassword(); JdbcTemplate template = new JdbcTemplate(getDataSource()); try { Map mp = template.queryForMap(QUERY_USER_SQL, new String[] { username }); String salt = (String) mp.get("SALT_"); String userPassword = (String) mp.get("PASSWORD_"); System.out.println(salt + "salt"); System.out.println(userPassword + "userPassword"); String cPassword = passwordEncoder.encodePassword(password, salt); System.out.println(cPassword + "cPassword"); //比较密码是否相同,相同就返回true,不相同就返回false if (cPassword.equals(userPassword)) { return true; } else { return false; } } catch (final IncorrectResultSizeDataAccessException e) { // this means the username was not found. throw new UnknownUsernameAuthenticationException(); } }}
登陆测试看是否可用!前提是数据库有密码!
>
11. 测试登陆
自行测试
博主的测试是可以通过的,如果没有测试通过,请在private PasswordEncoder passwordEncoder = new ShaPasswordEncoder();这个地方打个断点试试,看看能否得到passwordEncoder
- cas 单点登录使用spring集成的ShaPasswordEncoder实现
- Spring Security集成CAS实现单点登录
- 第三部分:shiro集成spring使用cas单点登录配置
- 第三部分:shiro集成spring使用cas单点登录配置
- 集成CAS单点登录使用Shiro Session时,实现多点登出的解决办法
- CAS 实现的单点登录
- CAS 实现的单点登录
- 单点登录cas的使用
- Spring Security 4.0 CAS实现单点登录
- spring + shiro + cas 实现sso单点登录
- spring + shiro + cas 实现sso单点登录
- spring + shiro + cas 实现sso单点登录
- cas shiro spring实现单点登录
- spring + shiro + cas 实现sso单点登录
- spring boot 1.5.4 集成shiro+cas,实现单点登录和权限控制
- shiro 集成cas单点登录
- 使用CAS实现SSO(单点登录)
- 使用CAS框架快速实现单点登录
- 课程设计之学生成绩管理系统
- android 获取其他app启动次数和运行时间
- 使用Android Studio修改文件编码弹出的reload和convert有什么区别?
- 路
- 2017来了
- cas 单点登录使用spring集成的ShaPasswordEncoder实现
- android获取网络资源如何解析
- ActiiveMq 当前没有消费者。。为什么
- android 怎么实现有水平、垂直的滑动条的文本框?
- bzoj4720 [Noip2016]换教室
- Android如何加载一个现成的动态库
- ios7下弹出新浪微博界面,一出现就消失的问题
- 1120. Friend Numbers (20)解题报告
- 2017,你好!