使用Spring Security控制会话的方法可以分为以下步骤:
1. 添加Spring Security依赖
在pom.xml文件中添加Spring Security的依赖:
<dependencies>
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.5.0</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.5.0</version>
</dependency>
</dependencies>
2. 添加Spring Security配置
在Spring配置文件中添加Spring Security的配置:
<security:http>
<security:form-login login-page="/login" login-processing-url="/authenticate"/>
<security:logout logout-success-url="/" logout-url="/logout"/>
<security:csrf disabled="true"/>
</security:http>
通过以上配置,我们设置了登录页面为/login,登录请求的URL为/authenticate,登出请求的URL为/logout。也禁用了CSRF防护。
3. 编写登录页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<h1>Login Page</h1>
<form method="post" action="/authenticate">
<div>
<label>Username:</label>
<input type="text" name="username"/>
</div>
<div>
<label>Password:</label>
<input type="password" name="password"/>
</div>
<div>
<button type="submit">Login</button>
</div>
</form>
</body>
</html>
在登录页面中,我们只需要输入用户名和密码,然后提交表单到/authenticate请求即可。
4. 添加认证和授权
在Spring Security配置文件中,我们需要指定用户和角色的权限:
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="user1" password="{noop}password1" authorities="ROLE_USER"/>
<security:user name="user2" password="{noop}password2" authorities="ROLE_ADMIN"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
以上配置表示有两个用户,user1和user2,他们的密码分别为password1和password2,他们分别拥有ROLE_USER和ROLE_ADMIN两种角色。
示例1 认证后跳转
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
@GetMapping("/login")
public String login() {
return "login";
}
@GetMapping("/admin")
public String admin() {
return "admin";
}
@GetMapping("/user")
public String user() {
return "user";
}
}
在HomeController中,我们设置了几个请求URL的响应方法。/请求会返回home页面,/login请求会返回login页面,/admin请求会返回admin页面,/user请求会返回user页面。
现在我们需要控制访问这些页面的权限。在Spring Security配置文件中,我们可以设置如下:
<security:http>
<security:intercept-url pattern="/" access="permitAll"/>
<security:intercept-url pattern="/login" access="permitAll"/>
<security:intercept-url pattern="/admin" access="hasRole('ADMIN')"/>
<security:intercept-url pattern="/user" access="hasRole('USER')"/>
</security:http>
以上配置表示,/和/login请求是允许所有人访问的,/admin请求只有角色为ADMIN的用户可以访问,/user请求只有角色为USER的用户可以访问。
我们还可以添加一个登录成功后的跳转页面:
<security:http>
<!-- 其他配置 -->
<security:form-login login-page="/login" login-processing-url="/authenticate" default-target-url="/" always-use-default-target="true"/>
<!-- 其他配置 -->
</security:http>
其中,default-target-url表示默认的跳转路径,不管用户访问哪个页面,登录成功后都会跳转到该路径。
示例2 登录过期
如果用户长时间不活动,会话(Session)会过期。默认情况下,过期时间为30分钟。当会话过期后,用户需要重新登录。
我们可以通过配置来改变会话的过期时间:
<session-config>
<session-timeout>60</session-timeout>
</session-config>
以上配置表示会话过期时间为60分钟。
为了方便测试,我们可以将过期时间缩短:
<session-config>
<session-timeout>1</session-timeout>
</session-config>
在这种情况下,用户只需要等待1分钟,就可以发现会话过期了。
我们还可以配置会话过期后的跳转页面:
<security:http>
<!-- 其他配置 -->
<security:session-management invalid-session-url="/login?expired"/>
<!-- 其他配置 -->
</security:http>
以上配置表示会话过期后跳转到/login?expired页面。
最后,我们可以创建一个会话过期的测试页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Session Expired</title>
</head>
<body>
<h1>Session Expired</h1>
<p>Your session has expired. Please <a href="/login">login again</a>.</p>
</body>
</html>
以上就是使用Spring Security控制会话的方法的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Spring Security控制会话的方法 - Python技术站