前面我們講解了cas的簡單連接配接資料庫以及簡單的加密,可是有時候我們的登入可能不是cas原有的邏輯,我們就必須要重新cas的登入驗證以到達自己想要的效果,好在cas提供這些東西給我們自己重寫。但是在重寫這些之前,需要了解一下幾個注解以及一個配置檔案
注解:@Configuration、@EnableConfigurationProperties(CasConfigurationProperties.class)(這個是重寫一些東西必須得加上的)。
配置檔案
就是在resources建立一個mata-inf的檔案夾,然後建立一個交spring.factories的檔案。這裡面存放的就是我們要放置的類(具體可以檢視一下官方文檔)。
下面正式開始我們的自定義登入驗證的第一步。我們需要繼承某些類,其實cas
已經幫我弄好了一些抽象類,比如AbstractUsernamePasswordAuthenticationHandler,或者是jdbc的認證,其實這些我們都可以自己繼承然後重寫。我們這邊就用AbstractUsernamePasswordAuthenticationHandler這個作為例子把:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CO0YmMmdDZzEDZ2Q2MllTYkNmZ5UjM2MzNyUmYhJ2Mx8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
public class Login extends AbstractUsernamePasswordAuthenticationHandler { private static final org.slf4j.Logger LOGGER =LoggerFactory.getLogger(Login.class);public Login(String name, ServicesManager servicesManager, PrincipalFactory principalFactory,Integer order) {super(name, servicesManager, principalFactory, order);// TODO Auto-generated constructor stub}//private final String sql="select password from sec_user where username=?";private String sql="select * from sec_user where username=?";@Overrideprotected HandlerResult authenticateUsernamePasswordInternal(UsernamePasswordCredential transformedCredential,String originalPassword) throws GeneralSecurityException, PreventedException {// TODO Auto-generated method stubDriverManagerDataSource d=new DriverManagerDataSource();d.setDriverClassName("com.mysql.jdbc.Driver");d.setUrl("jdbc:mysql://127.0.0.1:3306/test");d.setUsername("root");d.setPassword("root");JdbcTemplate template=new JdbcTemplate();template.setDataSource(d);String username=transformedCredential.getUsername();String pd=transformedCredential.getPassword();查詢資料庫加密的的密碼UserInfo user=template.queryForObject(sql, new Object[]{username}, new BeanPropertyRowMapper(UserInfo.class));//if(sqlpd.equals(pd)){//return createHandlerResult(transformedCredential, principalFactory.createPrincipal(username, null), null);//}if(user==null){throw new FailedLoginException("沒有該使用者");}//傳回多屬性Map map=new HashMap<>();map.put("email