SpringBoot怎么使用拦截器或者过滤器的机制不使用shiro但是实现shiro的权限拦截数据库五张权限和角色表
在Spring Boot中,可以使用拦截器或过滤器来实现权限控制。具体步骤如下:
-
创建自定义拦截器或过滤器。可以继承HandlerInterceptorAdapter类实现拦截器,或者实现javax.servlet.Filter接口实现过滤器。
-
在拦截器或过滤器中,实现权限控制的逻辑。可以根据用户的角色或权限信息,在请求到达控制器之前进行拦截或过滤。
-
在Spring Boot配置中,将自定义拦截器或过滤器注册到拦截器链或过滤器链中。可以通过@Configuration注解和@Bean注解来实现配置。
-
在数据库中创建权限表和角色表,并进行相应的数据填充。
-
在控制器中,使用@PreAuthorize注解来实现方法级别的权限控制。@PreAuthorize注解可以指定需要的权限或角色信息,如果用户没有相应的权限或角色,则请求会被拦截。
具体的实现步骤可以参考以下代码示例:
- 创建自定义拦截器或过滤器
public class CustomInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 实现权限控制逻辑
return true;
}
}
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
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注解实现方法级别的权限控制
@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中使用拦截器或过滤器实现权限控制,并使用数据库中的权限表和角色表进行权限管理的步骤
原文地址: https://www.cveoy.top/t/topic/fi1H 著作权归作者所有。请勿转载和采集!