SpringBoot 拦截器/过滤器权限控制:不使用Shiro实现数据库权限管理
在 Spring Boot 中,可以使用拦截器或过滤器来实现权限控制,无需依赖 Shiro。本文将详细介绍实现步骤,并提供代码示例。
-
创建自定义拦截器或过滤器
-
继承
HandlerInterceptorAdapter类实现拦截器:public class CustomInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 实现权限控制逻辑 return true; } } -
实现
javax.servlet.Filter接口实现过滤器:public class CustomFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // 初始化操作 } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 实现权限控制逻辑 filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { // 销毁操作 } }
-
-
注册拦截器或过滤器到拦截器链或过滤器链中
-
使用
@Configuration注解和@Bean注解配置拦截器:@Configuration public class AppConfig { @Bean public CustomInterceptor customInterceptor() { return new CustomInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(customInterceptor()).addPathPatterns("/**"); } @Bean public CustomFilter customFilter() { return new CustomFilter(); } @Override public void configure(WebSecurity web) throws Exception { web.addFilterBefore(customFilter(), BasicAuthenticationFilter.class); } }
-
-
创建权限表和角色表,并进行数据填充
-
创建权限表:
CREATE TABLE permission ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL ); -
创建角色表:
CREATE TABLE role ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, description VARCHAR(200) DEFAULT NULL ); -
创建角色权限表:
CREATE TABLE role_permission ( id INT PRIMARY KEY AUTO_INCREMENT, role_id INT NOT NULL, permission_id INT NOT NULL, FOREIGN KEY (role_id) REFERENCES role(id), FOREIGN KEY (permission_id) REFERENCES permission(id) ); -
插入数据:
-- 插入权限数据 INSERT INTO permission (name) VALUES ('admin'); INSERT INTO permission (name) VALUES ('user'); -- 插入角色数据 INSERT INTO role (name, description) VALUES ('admin', '管理员'); INSERT INTO role (name, description) VALUES ('user', '普通用户'); -- 插入角色权限数据 INSERT INTO role_permission (role_id, permission_id) VALUES (1, 1); INSERT INTO role_permission (role_id, permission_id) VALUES (2, 2);
-
-
在控制器中,使用 @PreAuthorize 注解实现方法级别的权限控制
-
使用
@PreAuthorize注解指定需要的权限或角色:@RestController public class UserController { @PreAuthorize("hasAuthority('admin')") @GetMapping("/admin") public String admin() { return "Hello admin!"; } @PreAuthorize("hasAuthority('user')") @GetMapping("/user") public String user() { return "Hello user!"; } }
-
以上就是在 Spring Boot 中使用拦截器或过滤器实现权限控制,并使用数据库中的权限表和角色表进行权限管理的步骤。
注意:
- 具体实现需要根据实际需求调整,如用户认证、角色和权限的获取等。
- 可以使用 Spring Security 等框架来简化权限管理的实现。
- 建议使用 Spring Security 的
@PreAuthorize注解来实现方法级别的权限控制,它提供了更加丰富的表达式语法。
希望本文能够帮助您在 Spring Boot 中实现高效的权限控制!
原文地址: https://www.cveoy.top/t/topic/oaAR 著作权归作者所有。请勿转载和采集!