使用Spring Security的hasPermission时无法访问页面

克莱伯·莫塔(Kleber Mota)

在我的项目中,控制器中的方法具有以下结构:

@Controller
@RequestMapping(value="privado")
public class PrivadoController {

    @RequestMapping(value="admin")
    @PreAuthorize("hasPermission(#usuario, 'admin_main')")
    public ModelAndView admin() {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("privado/admin");
        return mav;
    }

    @RequestMapping(value="customer")
    @PreAuthorize("hasPermission(#usuario, 'customer_main')")
    public ModelAndView customer() {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("privado/customer");
        return mav;
    }

}

方法hasPermission在此CustomPermissionEvaluator类中实现:

@Component
public class CustomPermissionEvaluator implements PermissionEvaluator {

    public CustomPermissionEvaluator() {
    }

    @Override
    public boolean hasPermission(Authentication arg0, Object arg1, Object arg2) {
        System.out.println("CustomPermissionEvaluator.hasPermission");
        if (arg0 == null || !arg0.isAuthenticated())
            return false;
        else
            return arg0.getAuthorities().contains(arg1);
    }

    @Override
    public boolean hasPermission(Authentication arg0, Serializable arg1, String arg2, Object arg3) {
        throw new RuntimeException("Id-based permission evaluation not currently supported.");
    }

}

我的问题是,尽管通知了正确的登录凭据,并为数据库中保存的用户提供了适当的角色abd权限,但我仍面临着默认的拒绝访问页面(并且我的项目中有一个针对此错误的自定义页面)。

有人可以在这里看到我做错了吗?

ps .:我的应用程序安全层的完整代码可以在这里找到:

https://github.com/klebermo/webapp2/tree/master/src/com/spring/webapp/lojavirtual/config/security

克莱伯·莫塔(Kleber Mota)

在对代码进行了更仔细的分析之后,我终于设法解决了这个问题。碰巧我在方法的主体中使用了错误的参数。我的CustomPermissionEvaluator的最终代码是:

@Component
public class CustomPermissionEvaluator implements PermissionEvaluator {

    public CustomPermissionEvaluator() {
    }

    public boolean hasPermission(Authentication arg0, Object arg1) {
        System.out.println("CustomPermissionEvaluator.hasPermission");
        System.out.println("arg0 = "+arg0);
        System.out.println("arg1 = "+arg1);

        if (arg0 == null || !arg0.isAuthenticated()) {
            System.out.println("false");
            return false;
        }
        else {
            System.out.println("true");
            for(GrantedAuthority authority: arg0.getAuthorities()) {
                if(authority.getAuthority().equals(arg1))
                    return true;
            }
            return false;
        }
    }

    @Override
    public boolean hasPermission(Authentication arg0, Object arg1, Object arg2) {
        System.out.println("CustomPermissionEvaluator.hasPermission");
        System.out.println("arg0 = "+arg0);
        System.out.println("arg1 = "+arg1);
        System.out.println("arg2 = "+arg2);

        if (arg0 == null || !arg0.isAuthenticated()) {
            System.out.println("false");
            return false;
        }
        else {
            System.out.println("true");
            for(GrantedAuthority authority: arg0.getAuthorities()) {
                if(authority.getAuthority().equals(arg2))
                    return true;
            }
            return false;
        }
    }

    @Override
    public boolean hasPermission(Authentication arg0, Serializable arg1, String arg2, Object arg3) {
        throw new RuntimeException("Id-based permission evaluation not currently supported.");
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Spring Security时无法访问jsf页面,发生403

在401中无法访问Spring Security中的页面

Spring-Security-无法访问ServletException

使用 | 时无法访问属性

Spring Security:具有角色的用户无法访问端点

无法访问Spring Security登录的用户信息

为什么添加spring security后无法访问主页

使用路由器作为中继器时,为什么无法访问路由器的设置页面?

将 Spring Security 与 Spring Gateway 一起使用时出现“无法访问 javax.servlet.Filter”错误

使用类时无法访问for循环内创建的变量

使用cython.inline时无法访问的代码

使用WCF时无法访问Elmah错误日志

在AngularJS中使用.controller方法时无法访问$ location

对象名使用通配符时无法访问mbean

p/react:使用“标签”语法时无法访问状态

使用静态IP时无法访问互联网

尝试使用FragmentActivity时无法访问ActivityCompatApi23

使用BeautifulSoup进行SRE匹配时无法访问元素

使用 ApolloClient 时无法访问 this.props

为什么在使用switchMap时无法访问属性?

使用React Router时无法访问App组件

使用Jest运行测试时无法访问窗口属性

使用我的API时使功能无法访问

使用Terraform创建RDS时无法访问

使用Junit执行代码时无法访问Xml文件

使用subprocess.Popen时无法访问tempfile

在 R 中使用 for 循环时无法访问列

使用Spring Social无法访问Facebook上的朋友列表

Spring Security OAuth2-无法访问/ oauth /令牌路由