spring security 主要用于验证各种用户操作权限,下面开始添加用户信息验证
测试采用Idea所以,文件结构以Idea为基础
文件结构
因为验证成功后,页面会导航到"/",所以添加一个Controller
|java.com.lee.config
|---- WebAppinitializer
|---- WebConfig
|---- WebSecurityConfig
|---- SecurityWebApplicationInitializer
|java.com.lee.controller
|----HomeController
|
|webapp/WEB-INF/views
|----loginOK.jsp
HomeController.java
@Controller
public class HomeController {
@RequestMapping("/")
public String loginOK() {
return "loginOK";
}
}
loginOK.jsp // 只需要显示登录成功
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>登录成功</h1>
</body>
</html>
基于内存的用户存储,进行验证
回到添加验证规则文件WebSecurityConfig.java,添加下面代码
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager
= new InMemoryUserDetailsManager();
manager.createUser( // 添加用户信息
User.withUsername("user") // 账户名
.password("password") // 密码
.roles("USER") // 权限
.build());
manager.createUser(
User.withUsername("root").password("rootPWD").roles("USER").build());
return manager;
}
这里添加了2个账户信息,user和root,并且拥有相同的权限USER
基于JDBC数据库表进行验证
回到WebSecurityConfig.java文件中,将之前保存在内存中的配置信息删除掉,添加新代码
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource; // 定义的数据源
@Bean
public DataSource dataSource() {
Properties prop = new Properties();
DriverManagerDataSource ds = new DriverManagerDataSource();
try {
String path = getClass().getClassLoader().getResource("db.properties").getPath();
FileInputStream in = new FileInputStream(path);
prop.load(in);
String driver = prop.getProperty("driver");
String url = prop.getProperty("url");
String username = prop.getProperty("uname");
String password = prop.getProperty("pass");
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
in.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
return ds;
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery(
"select username, password, enable from t_user where username = ?")
.authoritiesByUsernameQuery(
"select username, authority from t_user where username = ?");
}
}
数据源内容需要数据库连接配置文件db.properties,放在resources文件夹中
driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/spring_security_demo
uname=root
pass=1234
测试
如果运行成功,并且输入上面给定的用户信息,网页会自动调转到loginOK.jsp页面
如果输入的信息错误会像下面这样(图1)
网友评论