下面是关于“Spring Boot整合Spring Security的示例代码”的完整攻略:
1. 创建Spring Boot项目
首先,在开始整合Spring Security之前,我们需要先创建一个基于Spring Boot的Web项目。可以使用Spring Initializr快速创建,也可以手动创建一个Spring Boot项目。这里我们以Spring Initializr为例:
- 打开Spring Initializr网站:https://start.spring.io/
- 在网站上我们需要选择一些基本信息,如项目名称、包名、Java版本、Spring Boot版本等。选择好后点击“Generate Project”按钮生成项目。
- 解压下载好的项目包,并进入项目的根目录(该目录下应该有pom.xml文件)。
2. 加入Spring Security的依赖
在生成的项目中,我们需要在pom.xml文件中添加Spring Security的依赖。可以通过在pom.xml文件中添加以下依赖来实现:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
3. 定义security的配置类
在项目中我们需要定义一个配置类用于配置Spring Security。具体可以通过继承WebSecurityConfigurerAdapter来实现。在该类中,我们需要重写configure方法,并在该方法中配置我们的安全规则。
以下是一个示例:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
这个示例中,我们配置了当访问根路径"/"和"/home"时,不需要任何认证即可访问;其他请求需要认证后访问。我们还配置了登录页面和注销地址。在configureGlobal方法中,我们配置了一个用户“user”,密码为“password”,角色为“USER”。
4. 增加登录页面和处理controller
为了增加更好的用户体验,我们可以在项目中增加一个登录页面。这里我们以Thymeleaf为例,主要是为了说明网页如何调用Spring Security提供的认证信息和登出功能。
首先在项目中创建一个login.html文件,使用Thymeleaf技术实现。在该页面中,我们需要使用thymeleaf提供的标签引用Spring Security中的用户名和密码输入框,以及登录和注销的链接:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Login Page</title>
</head>
<body>
<h1>Login Page</h1>
<div th:if="${param.error}">
Invalid username and password.
</div>
<div th:if="${param.logout}">
You have been logged out.
</div>
<form th:action="@{/login}" method="post">
<div><label>Username:</label><input type="text" name="username"/></div>
<div><label>Password:</label><input type="password" name="password"/></div>
<div><input type="submit" value="Log in"/></div>
</form>
<a th:href="@{/logout}" th:text="Logout"></a>
</body>
</html>
配置中使用的@{/login}
和@{/logout}
是Thymeleaf提供的表达式,用于生成相应的地址。我们还可以在Controller类中捕获这些地址的请求,即登陆和注销的相关请求,并将其映射到相应的页面:
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
@GetMapping("/")
public String home() {
return "home";
}
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
这个示例中,我们对"/login"地址的GET请求返回一个login.html页面,对"/"地址的GET请求返回一个home.html页面,对"/hello"地址的GET请求返回一个hello.html页面。
5. 部署实验项目并测试
现在,我们已经完成了Spring Security和Spring Boot的整合。接下来,我们需要以任意方式部署该项目。可以通过以下步骤来实现:
- 在项目根目录下执行
mvn package
。 - 进入target目录下查找一个名为
<project-name>-<project-version>.jar
的文件,该文件即为可执行的jar包。 - 在命令行下执行
java -jar <project-name>-<project-version>.jar
即可启动应用程序。
一切准备就绪后,可以在浏览器上打开以下链接进行测试:
- http://localhost:8080/hello - 该链接需要进行验证后才能访问,输入用户名"user",密码"password"后就可以访问了。
- http://localhost:8080/ - 访问该链接不需要进行验证,任何人都可以访问。
- http://localhost:8080/login - 该链接为登录页面,所有人都可以访问。
以上就是一个基本的Spring Security和Spring Boot整合示例,希望可以对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot整合Spring Security的示例代码 - Python技术站