下面是Spring Security实现统一登录与权限控制的示例代码攻略。
一、概述
Spring Security是一个强大的安全性框架,它可用于实现统一登录和权限控制。本文主要介绍如何使用Spring Security实现统一登录和权限控制。本文适用于有一定的JavaWeb开发经验的读者。
二、Spring Security配置
要使用Spring Security实现统一登录和权限控制,需要先添加Spring Security相关依赖。例如,使用Maven构建JavaWeb项目:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
然后,在Spring配置文件中添加以下内容:
<bean id="springSecurityFilterChain" class="org.springframework.web.filter.DelegatingFilterProxy" />
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
<security:intercept-url pattern="/**" access="permitAll" />
<security:form-login login-page="/login" default-target-url="/welcome" always-use-default-target="true" authentication-failure-url="/login?error" />
<security:logout logout-success-url="/login" invalidate-session="true" />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="admin" password="admin" authorities="ROLE_ADMIN" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
这里简要说明下以上配置的作用:
springSecurityFilterChain
配置代理过滤器。security:http
配置HTTP访问控制,intercept-url
配置URL拦截和对应的访问控制规则,form-login
配置登录和认证成功后的默认跳转页面,logout
配置退出登录。security:authentication-manager
配置用户认证管理,可以通过user-service
配置用户名、密码、权限等信息。
三、Spring MVC登录页面和控制器
Spring Security只负责安全相关的功能,不包含登录页面。因此需要手动创建登录页面,并编写登录功能的控制器。
1. 创建登录页面
在Web应用的WEB-INF文件夹下创建一个名为jsp
的文件夹,在jsp
文件夹中创建login.jsp
页面,其代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<form action="<%= request.getContextPath()%>/login" method="post">
<div>
<label for="username">Username:</label>
<input type="text" id="username" name="username"/>
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" name="password"/>
</div>
<input type="submit" value="Log In"/>
</form>
</body>
</html>
2. 新建登录控制器
在Spring MVC控制器中,使用RequestMapping
注解将请求映射到登录页面:
@Controller
public class LoginController {
@RequestMapping("/login")
public String login(Model model, String error, String logout) {
if (error != null) {
model.addAttribute("error", "Your username and password are invalid.");
}
if (logout != null) {
model.addAttribute("message", "You have been logged out successfully.");
}
return "login.jsp";
}
}
四、测试
现在,您可以测试您的项目并相应地进行更改以适合您的需求。在浏览器中访问登录页面http://localhost:8080/yourapp/login
,输入用户名和密码,然后单击“登录”按钮。如果用户名和密码正确,则成功登录。如果不正确,则出现错误消息。意味着您的Spring应用已经可以响应登录请求并实现基本的访问控制。
五、示例代码
下面给出两条关于Spring Security的示例代码:
示例1:基本的基于角色的授权
<security:http auto-config="true">
<security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
<security:form-login login-page="/login" default-target-url="/welcome" />
<security:logout logout-success-url="/login" />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="admin" password="admin" authorities="ROLE_ADMIN" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
上述示例代码中配置了一个基于角色的授权机制。在配置文件中,使用了RoleVoter
投票器。当用户被授权访问受保护的资源时,Spring Security会对该用户所有的角色进行投票。
示例2:自定义实现用户认证
<security:http auto-config="true">
<security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
<security:form-login login-page="/login" default-target-url="/welcome" />
<security:logout logout-success-url="/login" />
</security:http>
<bean id="authProvider" class="com.example.security.MyAuthProvider">
</bean>
<security:authentication-manager>
<security:authentication-provider ref="authProvider" />
</security:authentication-manager>
上述示例代码配置了如何实现对用户身份的认证。自定义了一个类MyAuthProvider
,该类继承了AbstractUserDetailsAuthenticationProvider
。所有用户验证逻辑在该类中进行。在XML文件中,使用authentication-manager
指定使用自定义的authentication-provider
作为用户认证管理机制。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Security实现统一登录与权限控制的示例代码 - Python技术站