笔记2:添加用户验证

2017-12-13  本文已影响0人  LeeSpringFly

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)

log2_login_error.png
上一篇 下一篇

猜你喜欢

热点阅读