当前位置: 首页 > 知识库问答 >
问题:

Spring Security动态角色

樊胜
2023-03-14
<http use-expressions="true" >
        <intercept-url pattern="/**" access="isAuthenticated()"/>
        <form-login  login-page="/login.jsp" 
                     login-processing-url="/login"
                     username-parameter="userName"
                     password-parameter="password"
                     authentication-success-handler-ref="authenticationSuccessHandler"
                     authentication-failure-handler-ref="authenticationFailedHandler"
                     />
        <logout logout-url="/logout" invalidate-session="true" logout-success-url="/login.jsp?logout=true"/>
        <access-denied-handler error-page="/accessDenied"/>
    </http>

自定义身份验证提供程序

List<GrantedAuthority> AUTHORITIES = new ArrayList<GrantedAuthority>();
    if(userName.equals("admin")){
        System.out.println("++++++ admin user +++++");
        AUTHORITIES.add(new SimpleGrantedAuthority("/hello"));
        AUTHORITIES.add(new SimpleGrantedAuthority("/hello1"));
        AUTHORITIES.add(new SimpleGrantedAuthority("/hello2"));
    }else{
        AUTHORITIES.add(new SimpleGrantedAuthority("/hello"));
        AUTHORITIES.add(new SimpleGrantedAuthority("/hello1"));
    }
    return new UsernamePasswordAuthenticationToken(userName,null,AUTHORITIES);

在上面的例子中,现在所有的用户都可以访问所有的URL,但请帮助限制他们只能访问授予他的URL。

共有1个答案

吴浩皛
2023-03-14

试试这个,

<http use-expressions="true" >
    <intercept-url pattern="/**" access="hasRole('ROLE_USER') or hasRole('ROLE_ADMIN') or hasRole('ROLE_MYCUSTOMROLE')"/>
    <form-login  login-page="/login.jsp" 
                 login-processing-url="/login"
                 username-parameter="userName"
                 password-parameter="password"
                 authentication-success-handler-  ref="authenticationSuccessHandler"
                 authentication-failure-handler-  ref="authenticationFailedHandler"
                 />
    <logout logout-url="/logout" invalidate-session="true" logout-success-url="/login.jsp?logout=true"/>
    <access-denied-handler error-page="/accessDenied"/>
</http>

注意1:为了清晰起见,使用安全名称空间,访问属性应该有一些角色,而不是url

不是将URl传递给GrantedAuthority,而是传递一些角色,甚至您也可以做得更好,只需创建一个User pojo类并实现UserDetails,这样您就可以避免大量的锅炉板代码。

 类似资料:
  • 我试图在一个带有spring security和KeyClope的java应用程序中同时使用领域和资源角色。不幸的是,KeyClope只会返回一个或另一个,具体取决于: 您仍然可以通过自定义代码获得这两种方法,但它会弄乱@PreAuthorize或spring boot方法等注释。isUserInRole,这会导致难看的代码。 有没有办法覆盖@PreAuthorize方法或JSON令牌Keyclo

  • 问题内容: 很明显,我的应用程序自动以默认状态(网址为:“ /”)启动。我们称它为state 。 如果某个条件是真实的,我想坚持一下。这意味着如果例如,那么我希望状态成为第一个加载的状态。 我的问题是,例如,当我检查该条件时,默认状态已经被加载并显示在视图中,然后才切换到state 。 有什么方法可以仅在检查条件后才阻止状态加载并启动它吗? 问题答案: 有一个可行的例子 如评论中所述,我们可以使用

  • 问题内容: 在html模板中,我具有带有动态图像的这种样式: 可以在网络浏览器和android浏览器中使用。但是,使用“ style =”动态显示的背景图像不会在iPad上显示。 我总是可以使用img标签创建动态图像,但是我正在寻找iPad的样式/ css解决方案。 问题答案: 改用 要么

  • 问题内容: 我正在使用awesomium制作游戏中的用户界面,有时游戏会加载并执行一段JavaScript,以创建任意新的UI元素。例如 效果很好,当我想创建一些更高级的UI元素(特别是使用angular)时,就会出现问题。例如: 毫不奇怪,这不会创建新的角度视图。它只是将该html添加到文档中,而从未绑定到ChatBoxControl。 我如何才能在这里实现自己的目标? 问题答案: 您应该$ c

  • 主要内容:1.入门,2.设置用户名和密码1.入门 1.启动一个SpringBoot项目 2.导入SpringSecurity相关依赖 3.编写Controller TestController.java 用户是user 密码是刚刚的 2.设置用户名和密码 1.在配置文件中设置 2.在配置类中设置 3.自定义实现类 2.1 配置文件中设置 2.2 在配置类中设置 设置用户名为zZZ,密码为root 2.3 自定义实现类 配置类: 业务类:

  • 我的理解是,在任何给定的时间点上,一个线程只能执行onRecture。 假设我有一个非类型的演员,定义如下: 我基本上想使用Akka而不使用期货。同时,我希望我的演员们不要尽可能多地阻拦。在我的onReceive中生成递归子角色,单独处理来自其他角色的特定消息,可以吗? 本质上,在我的“if(message.equals(“dbresponse”)”中,我只想记录一个DB响应,而不是在Exampl