package me.test.cas.server; import javax.validation.constraints.NotNull; import org.jasig.cas.adaptors.jdbc.AbstractJdbcUsernamePasswordAuthenticationHandler; import org.jasig.cas.authentication.handler.AuthenticationException; import org.jasig.cas.authentication.principal.UsernamePasswordCredentials; import org.springframework.beans.factory.InitializingBean; /** * * @see org.springframework.security.authentication.encoding.BasePasswordEncoder * @see org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler * * @author ZLL * */ public class MySearchModeSearchDatabaseAuthenticationHandler extends AbstractJdbcUsernamePasswordAuthenticationHandler implements InitializingBean { private static final String SQL_PREFIX = "Select count('x') from "; @NotNull private String fieldUser; @NotNull private String fieldPassword; @NotNull private String tableUsers; private String sql; @Override protected boolean authenticateUsernamePasswordInternal( UsernamePasswordCredentials credentials) throws AuthenticationException { final String transformedUsername = getPrincipalNameTransformer() .transform(credentials.getUsername()); final String encyptedPassword = getPasswordEncoder().encode( mergePasswordAndSalt(credentials.getPassword(), credentials.getUsername(), true)); System.out.println("==============="+transformedUsername+":"+encyptedPassword); final int count = getJdbcTemplate().queryForInt(this.sql, transformedUsername, encyptedPassword); return count > 0; } protected String mergePasswordAndSalt(String password, Object salt, boolean strict) { if (password == null) { password = ""; } if (strict && (salt != null)) { if ((salt.toString().lastIndexOf("{") != -1) || (salt.toString().lastIndexOf("}") != -1)) { throw new IllegalArgumentException( "Cannot use { or } in salt.toString()"); } } if ((salt == null) || "".equals(salt)) { return password; } else { return password + "{" + salt.toString() + "}"; } } public void afterPropertiesSet() throws Exception { this.sql = SQL_PREFIX + this.tableUsers + " Where " + this.fieldUser + " = ? And " + this.fieldPassword + " = ?"; } /** * @param fieldPassword * The fieldPassword to set. */ public final void setFieldPassword(final String fieldPassword) { this.fieldPassword = fieldPassword; } /** * @param fieldUser * The fieldUser to set. */ public final void setFieldUser(final String fieldUser) { this.fieldUser = fieldUser; } /** * @param tableUsers * The tableUsers to set. */ public final void setTableUsers(final String tableUsers) { this.tableUsers = tableUsers; } }