前言:
今天朋友们对“tomcat连接数据库做登录”都比较关注,看官们都需要学习一些“tomcat连接数据库做登录”的相关文章。那么小编同时在网摘上网罗了一些关于“tomcat连接数据库做登录””的相关文章,希望兄弟们能喜欢,咱们一起来了解一下吧!前面我们讲解了cas的简单连接数据库以及简单的加密,可是有时候我们的登录可能不是cas原有的逻辑,我们就必须要重新cas的登录验证以到达自己想要的效果,好在cas提供这些东西给我们自己重写。但是在重写这些之前,需要了解一下几个注解以及一个配置文件
注解:@Configuration、@EnableConfigurationProperties(CasConfigurationProperties.class)(这个是重写一些东西必须得加上的)。
配置文件
就是在resources新建一个mata-inf的文件夹,然后新建一个交spring.factories的文件。这里面存放的就是我们要放置的类(具体可以查看一下官方文档)。
下面正式开始我们的自定义登录验证的第一步。我们需要继承某些类,其实cas
已经帮我弄好了一些抽象类,比如AbstractUsernamePasswordAuthenticationHandler,或者是jdbc的认证,其实这些我们都可以自己继承然后重写。我们这边就用AbstractUsernamePasswordAuthenticationHandler这个作为例子把:
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=?"; @Override protected HandlerResult authenticateUsernamePasswordInternal(UsernamePasswordCredential transformedCredential, String originalPassword) throws GeneralSecurityException, PreventedException { // TODO Auto-generated method stub DriverManagerDataSource 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>(UserInfo.class)); // if(sqlpd.equals(pd)){// return createHandlerResult(transformedCredential, principalFactory.createPrincipal(username, null), null);// } if(user==null){ throw new FailedLoginException("没有该用户"); } //返回多属性 Map<String, Object> map=new HashMap<>(); map.put("email", user.getEmail().toString()); map.put("status", user.getStatus().toString()); LOGGER.info(map.get("email").toString()); LOGGER.info("++++++++++++++++++++zjzjzjz",map); if(PasswordUtil.decodePassword(user.getPassword(), pd, username)){ return createHandlerResult(transformedCredential, principalFactory.createPrincipal(username, map), null); } throw new FailedLoginException("Sorry, login attemp failed.");// return null; }}
上面就完成了一个自定义登陆验证的以及返回多属性的问题。但是完成这个不等于我们自定义成功,接下来还需要将这个给注册进去,其代码如下:
@Configuration("MyAuthenticationConfiguration")@EnableConfigurationProperties(CasConfigurationProperties.class)public class MyAuthenticationConfiguration implements AuthenticationEventExecutionPlanConfigurer { @Autowired private CasConfigurationProperties casProperties; @Autowired @Qualifier("servicesManager") private ServicesManager servicesManager; @Bean public AuthenticationHandler myAuthenticationHandler() { final Login handler = new Login(Login.class.getSimpleName(), servicesManager, new DefaultPrincipalFactory(), 10); return handler; } @Override public void configureAuthenticationExecutionPlan(AuthenticationEventExecutionPlan plan) { // TODO Auto-generated method stub plan.registerAuthenticationHandler(myAuthenticationHandler()); }}
最后在配置文件里面加上这个注册类的具体路径以及类名:org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.zj.cas.MyAuthenticationConfiguration。
这时候就完成自定义登录验证。然后重新编译并且打包,然后放到tomcat里面运行,这个时候登录的逻辑就是你自己的自定义逻辑。
标签: #tomcat连接数据库做登录 #cas单点登录认证 #cas登录号查询