下面是Spring Security入门demo案例的完整攻略。
一、前置知识
在开始学习Spring Security入门demo案例之前,你需要具备以下一些基础知识:
- 基本的Java编程语言和Spring框架的了解;
- 熟悉Spring MVC框架的开发以及相关的Maven工程构建方式。
二、Spring Security简介
Spring Security是Spring框架的安全管理组件,提供了一系列的安全机制,帮助开发者实现用户权限管理、认证及授权管理等相关功能。其中比较常见的功能包括:登录认证、注销、密码管理、需要登录才能访问等。
三、Spring Security入门demo案例
本次案例演示以Spring Boot为基础环境,使用Spring Security进行用户登录/退出/权限管理的实现。
1. 新建Spring Boot项目
在Eclipse或者Intellij IDEA中创建一个名为spring-security-demo
的Spring Boot工程,并加入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. 配置Spring Security
为了简化配置,我们可以采用JavaConfig方式配置Spring Security:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/css/**", "/js/**", "/fonts/**", "/index").permitAll() // 允许访问的静态资源
.antMatchers("/users/**").hasRole("ADMIN") // 需要登录才能访问的资源
.and()
.formLogin()
.loginPage("/login").failureUrl("/login-error") // 配置登录页面及错误页面
.and()
.exceptionHandling().accessDeniedPage("/403"); // 配置没有权限的页面
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER")
.and()
.withUser("admin").password("password").roles("ADMIN");
}
}
上面的代码中,configure(HttpSecurity http)
方法用于配置Spring Security的授权管理,其中authorizeRequests()
指定需要授权管理的请求,antMatchers()
方法配置需要授权的资源,permitAll()
方法配置允许所有访问的资源,hasRole()
方法配置需要指定权限才能访问的资源,formLogin()
方法配置处理登录认证的逻辑,loginPage()
方法指定登录页面的URI,failureUrl()
方法指定登录失败后跳转的页面,exceptionHandling()
方法配置应用的异常处理,accessDeniedPage()
方法指定没有权限的页面。
configureGlobal(AuthenticationManagerBuilder auth)
方法用于配置认证管理,其中inMemoryAuthentication()
方法用于配置基于内存的认证管理,withUser()
方法用于配置认证的用户信息。
3. 创建登录页面
在src/main/resources/templates目录下创建一个名为login.html
的模板文件用于显示登录页面:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>登录</title>
<link rel="stylesheet" th:href="@{/css/bootstrap.min.css}" />
<link rel="stylesheet" th:href="@{/css/login.css}" />
</head>
<body>
<div class="container">
<form th:action="@{/login}" method="POST" class="form-signin">
<h2 class="form-signin-heading">请登录</h2>
<label for="username" class="sr-only">用户名</label>
<input type="text" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" class="hide" />
<input type="text" name="username" id="username" class="form-control" placeholder="用户名" required autofocus />
<label for="password" class="sr-only">密码</label>
<input type="password" name="password" id="password" class="form-control" placeholder="密码" required />
<button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>
<br />
<div th:if="${param.error}" class="alert alert-danger">
用户名或密码错误,请重新输入!
</div>
<div th:if="${param.logout}" class="alert alert-success">
退出成功!
</div>
</form>
</div>
</body>
</html>
该模板文件使用了Thymeleaf模板引擎,用于显示表单页面,其中引入了Bootstrap样式库和自定义的login.css样式文件,并且使用了Spring Security提供的_csrf
标签,防止CSRF攻击。
4. 创建首页
在src/main/resources/templates目录下创建一个名为index.html
的模板文件用于显示应用首页。该首页中包含了退出登录的链接:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>首页</title>
<link rel="stylesheet" th:href="@{/css/bootstrap.min.css}" />
<link rel="stylesheet" th:href="@{/css/login.css}" />
</head>
<body>
<div class="container">
<h1>欢迎您,管理员!</h1>
<hr />
<p>
<a th:href="@{/logout}" class="btn btn-lg btn-warning" role="button">退出登录</a>
</p>
</div>
</body>
</html>
注意,退出登录的链接的URI为/logout
,Spring Security会拦截该请求,并进行用户注销的处理。
5. 运行程序
启动应用程序并在浏览器中输入http://localhost:8080/login
进行登录操作。可以输入用户名user
和密码password
进行普通用户的登录,或输入用户名admin
和密码password
进行管理员的登录,登录成功后即可访问管理员首页http://localhost:8080/users
,或者退出登录访问登录页面http://localhost:8080/login
。而访问需要登录才能访问的其他资源时,系统会自动跳转到登录页面。
四、总结
本次案例演示了Spring Security在Spring Boot项目中的基本应用,并实现了用户登录/退出/权限管理等功能。在实际开发中,Spring Security可以很好的保证应用的安全性,开发者也可以自定义实现更加复杂的安全机制,如实现OAuth2的认证授权机制等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Security入门demo案例 - Python技术站