@PreAuthorize 不起作用

前情提要:

我使用的是springboot 2.02 oauth2组合。

使用场景:根据业务需要,我需要对用户进行一个区分,比如说普通用户与超级用户管理员的区分。

但是,在使用了

@PreAuthorize("hasRole('USER')")之后发现并没有效果

条件1,你需要在你的配置项中添加这一行代码

@EnableGlobalMethodSecurity(prePostEnabled=true)

我在网上搜索到的答案大部分都是这样的,并且也都是在这种形式。这里我要提一下,我的授权服务器同时也是资源服务器,所以在我的另外一个资源里面,也要添加这一行代码的,否则光授权有,另外一个资源服务器没有这行代码是不起作用的。

然后使用方法是在controller层的方法上添加

@PreAuthorize("hasRole('USER')")这行代码就行,更具体的表达式请参考这个老哥的博客http://blog.csdn.net/w605283073/article/details/51327182

到这里网上几乎就是这种回答了,但是我的问题是,我不可能说我手动的在auth.inMemoryAuth...().withUser()方法里面一个个添加用户然后做角色判断的,我数据库表里几千个用户,一个个手动添加那完蛋了。有一种取巧的是,我只对管理员进行添加(个人不建议这种)。

然后第二种的话,肯定是从数据库里面添加了。

看图,关键点在这行代码

AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_USER"),里面的参数不是"USER",切记。

我图上的是对所有用户进行user角色的添加,如果要添加admin的话,那只要事先对用户标记,然后再进行角色添加就行了,无非是多几个if判断而已。好了,做到这里如果还是没有效果,请先在控制台里执行mvn clean compile

到这一步就结束了,亲测可行,认真脸.jpg

猜你喜欢

转载自blog.csdn.net/weixin_41195786/article/details/84439384