NutzCN Logo
问答 集成了shiro后,如何覆盖shiro的未登录调整
发布于 955天前 作者 qq_e7da0606 1144 次浏览 复制 上一个帖子 下一个帖子
标签: shiro

现在集成了shiro。如果需要权限的未登录,会直接跳转到/user/login,
或者自己配置的url,比如authc.loginUr = xxxx/。
这里我如何不重定向,而自定义返回方式了

13 回复

你指的是入口方法吗? 那处理的是这个类 NutShiroProcessor

可以继承它进行自定义,或者通过修改NutShiro类的属性进行url自定义.

貌似还没到NutShiroProcessor这里来就...

贴shiro.ini看看, 记得用菜单上的代码块包起来, 且说一下访问的URI

用菜单的代码块啊

来自炫酷的 NutzCN

authc = org.nutz.integration.shiro.CaptchaFormAuthenticationFilter

;将shiro的登录路径映射到本项目module的登录
authc.loginUrl = /v1/users/signin
perms.loginUrl = /v1/users/signin
roles.loginUrl = /v1/users/signin

如果服务器重启,session丢失,这里我配置了authc.loginUrl用来处理自定义跳转,如果不配置,则会跳转到默认的配置。这种情况貌似不会走到到NutShiroProcessor这一步。我希望我可以自己处理未获取权限的情景,而不是跳转到某个页面或者url

补充动作链,配置

	//动作链。以下配置仅比默认配置多了一个vc.thinker.mvc.LogTimeProcessor
	var chain = {
	"default" : {
		"ps" : [ 
			"vc.thinker.mvc.processor.LogTimeProcessor",//自定义
			"org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor",
			"org.nutz.mvc.impl.processor.EncodingProcessor",
			"org.nutz.mvc.impl.processor.ModuleProcessor",
			"org.nutz.integration.shiro.NutShiroProcessor",//自定义
	//			"ioc:demoProcessor",//自定义,直接注入ioc bean
			"vc.thinker.mvc.processor.DemoProcessor",
			"vc.thinker.mvc.processor.CheckJoinedOrganProcessor",
			"org.nutz.mvc.impl.processor.ActionFiltersProcessor",
			"org.nutz.mvc.impl.processor.AdaptorProcessor",
			"!org.nutz.plugins.validation.ValidationProcessor",//默认不启用,去掉 '!'可改为启用
			"org.nutz.mvc.impl.processor.MethodInvokeProcessor",
			"org.nutz.mvc.impl.processor.ViewProcessor" 
		],
		"error" : 'org.nutz.mvc.impl.processor.FailProcessor'
	}
	};

那得覆盖CaptchaFormAuthenticationFilter里面的方法

PS: authc/perms/roles是3个不同的东西

我不是登录触发哦!所以也不会到CaptchaFormAuthenticationFilter。我调试了也不会到CaptchaFormAuthenticationFilter。

那你访问啥, 总有个什么地方把你的请求重定向了啊...

shiro.ini中配置了/** = authc

如果controller中我配置了@RequiresPermissions("firm:products:view")类似的注解权限,访问这些url的时候会走NutShiroProcessor。但是如果没有,且没有登录就不会走NutShiroProcessor。

所以, 结论就是被authc拦截了, 而authc在你的配置里面就是CaptchaFormAuthenticationFilter, 所以呢, 你找的是onAccessDenied方法, 覆盖它就好了

PS: 做跳转的方法叫 saveRequestAndRedirectToLogin, 覆盖它应该更好,因为onAccessDenied还有判断是否登陆请求的代码.

谢谢!受教了

添加回复
请先登陆
回到顶部