Control desire 2019-01-05 18:16 采纳率: 0%
浏览 434

配置权限框架拦截规则

拦截所有的浏览器请求
access="ROLE_ADMIN" 只有ROLE_ADMIN角色的用才可以访问 规则角色名必须以ROLE_开头
为啥都得以ROLE_开头 还必须得大写 我试了小写role都不行 可以登录 但是跳转到了权限不足的页面
只有admin 和 user 有权限登录
图片说明

这个是我的spingmvc的配置

<security:http auto-config="true" use-expressions="true"

    <security:intercept-url pattern="/**" access="hasAnyRole('ROLE_ADMIN','role_user','ROLE_USER','137230080')"
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 15:40
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这个问题,首先确保你的Spring Boot项目中已经正确地配置了@EnableWebSecurity注解。如果还没有,请添加以下代码:

    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            // 设置允许所有用户访问的URL
            http.authorizeRequests()
                    .antMatchers("/").permitAll()
                    .anyRequest().authenticated();
    
            // 使用JWT令牌验证
            http.csrf().disable();
            http.headers().frameOptions().disable();
            http.oauth2Login();
        }
    
    }
    

    接下来,你需要在你的Maven项目中创建一个名为web.xml的文件,并添加以下配置:

    <web-app>
        <servlet>
            <servlet-name>springSecurityFilterChain</servlet-name>
            <servlet-class>org.springframework.web.filter.DelegatingFilterProxy</servlet-class>
            <init-param>
                <param-name>filterProcessesUrl</param-name>
                <param-value>/login/*</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>springSecurityFilterChain</servlet-name>
            <url-pattern>/login/*</url-pattern>
        </servlet-mapping>
    
        <!-- 其他过滤器 -->
        <filter>
            <filter-name>springSecurityFilterChain</filter-name>
            <filter-class>org.springframework.security.config.annotation.web.servlet.config.WebMvcConfigurerAdapter</filter-class>
            <init-param>
                <param-name>authenticationManagerBeanName</param-name>
                <param-value>authenticationManager</param-value>
            </init-param>
            <init-param>
                <param-name>addFormAuthenticationSuccessHandlerClass</param-name>
                <param-value>org.springframework.security.web.authentication.RedirectHttpEntryPoint</param-value>
            </init-param>
        </filter>
    </web-app>
    

    现在,你可以在控制器或视图中使用@PreAuthorize注解来检查用户的权限。

    例如,在一个控制器方法上添加@PreAuthorize("hasRole('ROLE_ADMIN')")@PreAuthorize("hasRole('ROLE_USER')")

    @PostMapping("/admin")
    public String adminPage() {
        return "admin-page";
    }
    
    @PostMapping("/user")
    public String userList() {
        return "user-list";
    }
    

    这样,只有具有ROLE_ADMIN角色的用户才能访问admin-page,而具有ROLE_USER角色的用户只能访问user-list

    如果你希望对特定的资源进行更细粒度的控制,你可以使用@PreAuthorize注解结合Spring MVC的@PathVariable@RequestParam等注解。例如,如果你想限制某些资源只对管理员显示,你可以这样做:

    @GetMapping("/restricted")
    public String restricted(@PathVariable String userId, Model model) {
        if (!userId.equals("admin")) {
            throw new ForbiddenException("Access denied");
        }
        model.addAttribute("message", "Welcome to the restricted area!");
        return "restricted";
    }
    

    这将确保只有当userIdadmin时,才能访问restricted页面。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签)
  • ¥50 sft下载大文阻塞卡死
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失
  • ¥15 springboot+vue 集成keycloak sso到阿里云
  • ¥15 win7系统进入桌面过一秒后突然黑屏