NutzCN Logo
问答 shiro 登录问题
发布于 3084天前 作者 qq_7e14da0b 4620 次浏览 复制 上一个帖子 下一个帖子
标签: shiro

请教为什么我配置了loginUrl,但是每次请求的时候都是直接跳转一个login.jsp,但是我的login.jsp 并不在这个位置。
authc = org.nutz.integration.shiro.CaptchaFormAuthenticationFilter
authc.loginUrl = /sys/login
logout.redirectUrl= /sys/login

6A9F77EA-7B23-4B79-A8CF-C02A71EF0C5C.png

25 回复

NutShiro.DefaultLoginURL=login.jsp
是不是配置了这个

@qq_ec8eb7ab531d0b1e8cef055bd4d4c445 没有配置这个~ 是要配置这个?我看nutzbook没配置啊~

@qq_7e14da0b
那你是不是用了shiroFilter 这个过滤器?

@qq_ec8eb7ab531d0b1e8cef055bd4d4c445
[main]

Session

sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
sessionManager.sessionDAO = $sessionDAO

sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
securityManager.sessionManager = $sessionManager

cookie

sessionIdCookie=org.apache.shiro.web.servlet.SimpleCookie
sessionIdCookie.name=nxzzld
sessionIdCookie.maxAge=946080000
sessionIdCookie.httpOnly=true
sessionManager.sessionIdCookie=$sessionIdCookie
sessionManager.sessionIdCookieEnabled=true
sessionManager.globalSessionTimeout=946080000

密码加密算法

credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher
credentialsMatcher.hashAlgorithmName=md5
credentialsMatcher.hashIterations=1

nutzdao_realm = com.nxzzld.sys.security.NxzzldDaoRealm
nutzdao_realm.credentialsMatcher=$credentialsMatcher

authc = org.nutz.integration.shiro.CaptchaFormAuthenticationFilter
authc.loginUrl = /sys/login
logout.redirectUrl= /sys/login

[urls]
/static/** = anon
/favicon.ico = anon
/getCaptcha=anon
/unauth = anon
/sys/login = authc
/sys/**=user
/logout = logout

一楼说的就是对的, 只是没说明白在哪里写

在MainSetup的init方法第一行写上

NutShiro.DefaultLoginURL="/sys/login";

至于为啥nutzbook没有写这个, 那是因为 NutShiro.DefaultLoginURL 默认值就是 "/user/login", 跟shiro.ini一致,所以没写

@wendal
public void init(NutConfig conf) {
NutShiro.DefaultLoginURL="/sys/login";
Ioc ioc = conf.getIoc();
Dao dao = ioc.get(Dao.class);
// Daos.createTablesInPackage(dao, "com.pumpkin", false);
}
设置了还是没有什么作用。 另外,这样做的话shiro.ini配置文件的authc.loginUrl 配置是不是可有可无?

跳到一个login.jsp ? 具体路径是啥

启动, 把日志清理一下, 然后访问 /sys/login 看看日志输出啥, 贴到这里来

[urls] 里是有先后拦截顺序的

authc.loginUrl = /sys/login
logout.redirectUrl= /sys/login

[urls]
/favicon.ico = anon
/getCaptcha=anon
/sys/doLogin=anon
/unauth = anon
/static/** = anon
/* = anon
/sys/** = authc

刚刚查了一下shiro的源码, 登陆的默认路径就是 login.jsp, 所以呢, 你可能需要debug一下这个方法

void org.apache.shiro.web.filter.AccessControlFilter.redirectToLogin(ServletRequest request, ServletResponse response) throws IOException

    protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException {
        String loginUrl = getLoginUrl();
        WebUtils.issueRedirect(request, response, loginUrl);
    }

@Wizzercn 顺序是没问题的。 我建立了个/sys/test ,当没登录访问/sys/test/的时候应该跳回/sys/login 但是却是跳回/login.jsp

/** = anon

回复没法修改?要打2个*

@wendal 访问/sys/login 是可以直接跳回登录页的。 现在就是没登录 的时候访问/sys/test应该是跳回/sys/login可是它却跳回了/login.jsp 。 这个应该是配置上的问题。但是配置文件因该是没啥问题的。

@qq_7e14da0b 那我知道了,

/sys/**=user

这个去掉

@Wizzercn 我现在是访问/sys/login 是可以正常跳转到登录页的。 但是访问没权限的路径跳转不回/sys/login。是这个原因

@qq_7e14da0b 原因是 user 这是另外一个拦截器, 而这个拦截器的loginUrl自然是没有修改的, 即默认值/login.jsp, 然后就没有然后了

@wendal
我的/sys/test 是需要登录用户才可以访问的。去掉以后不就没有权限拦截了么~~

@qq_7e14da0b 用注解啊

@RequiresUser
public void xxxx() {
 // xxx
}

@wendal 用注解的话没个上面都得加。用配置文件可以设置批量么~ 但是没太搞明白~ 不过还是谢谢兽总。

或者在[main]里面加入

user.loginUrl=/sys/login

也可以

@wendal 好的,谢谢兽总

最后采用了兽总在 23楼给出的 user.loginUrl=/sys/login 这个方案解决的。

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