cas security等权限框架的密码加密处理异同
cas服务端加密的处理:
(其他的第三方框架加密用法类似比如security登陆)
1,需要自己写一个类实现cas的加密接口PasswordEncoder即可,纳入spring容器管理
2,在需要配置 加密的地方直接引用这个bean即可
登陆的时候输入用户名,密码由于直接调用cas的登陆请求,所以数据直接传到框架---》由于配置了加密方式,cas是在QueryDatabaseAuthenticationHandler进行和
数据查出的密码比对的时候加密的,用的加密算法就是在查询sql中引用的加密bean(注意这个加密算法对sql查出的不会加密,数据库存的就是加好密的),
p:passwordEncoder-ref是告诉cas数据库中密码的加密方法,所以等下传进来的密码自动根据这个加密
<bean id="myPasswordEncoder" class="com.esteel.cas.MyPasswordEncoder"/>
<bean id="dbAuthHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="casDataSource"
p:sql="select trade_passwd from vw_member where CUSTOMER_STATUS='A' and CUS_USER_STATUS='A' and cus_user_id = ?"
p:passwordEncoder-ref="myPasswordEncoder"
/>
/* */ package com.esteel.cas;
/* */
/* */ import java.io.UnsupportedEncodingException;
/* */ import java.security.MessageDigest;
/* */
/* */ public class MyPasswordEncoder implements org.jasig.cas.authentication.handler.PasswordEncoder
/* */ {
/* */ public String encode(String rawPassword)
/* */ {
/* */ try
/* */ {
/* 12 */ return createEncryptPSW(rawPassword);
/* */ }
/* */ catch (Exception e) {
/* 15 */ e.printStackTrace();
/* */ }
/* 17 */ return null;
/* */ }
/* */
/* */ public static String createEncryptPSW(String psw)
/* */ throws Exception
/* */ {
/* 23 */ MessageDigest messagedigest = null;
/* */ try {
/* 25 */ messagedigest = MessageDigest.getInstance("MD5");
/* 26 */ messagedigest.update(psw.getBytes("UTF8"));
/* 27 */ byte[] abyte0 = messagedigest.digest();
/* 28 */ return new BASE64Encoder().encode(abyte0);
/* */ } catch (java.security.NoSuchAlgorithmException e) {
/* 30 */ throw new Exception("NoSuchAlgorithmException!", e);
/* */ } catch (UnsupportedEncodingException e) {
/* 32 */ throw new Exception("UnsupportedEncodingException!", e);
/* */ }
/* */ }
/* */ }
security登陆:
1 <bean id="daoAuthenticationProvider"
class="org.springframework.security.providers.dao.DaoAuthenticationProvider"
2 p:passwordEncoder-ref="passwordEncoder"//在提交的时候security就进行密码加密即使开发者都看不到,cas这块是在要比对的时候才加密,之前的明文还是可以看到
3 p:userDetailsService-ref="userDetailsService"/>userDetailsService属性也是指向了我们配置的Bean, 它负责从数据库中读取用户的信息
4 <bean id="passwordEncoder"
5 class="org.springframework.security.providers.encoding.Md5PasswordEncoder"/>