我需要知道如何覆盖shiro未经授权的页面。即,当用户对受保护的URL没有一些许可时,shiro返回页面401.我们如何使用户转发到预定义的未授权页面?
...谢谢
答案 0 :(得分:3)
我发现只有一种方法,如何将重定向更改为login.jsp以响应401。
您应该创建自己的Filter,它将扩展org.apache.shiro.web.filter.authc.FormAuthenticationFilter,并覆盖saveRequestAndRedirectToLogin()方法。
public class SecurityAuthenticationFilter extends FormAuthenticationFilter {
@Override
protected void saveRequestAndRedirectToLogin(ServletRequest request, ServletResponse response) throws IOException {
saveRequest(request);
sendChallenge(response);
}
protected void sendChallenge(ServletResponse response) {
HttpServletResponse httpResponse = WebUtils.toHttp(response);
httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}
}
我使用Guice + Shiro集成。因此,此过滤器的添加方式与org.apache.shiro.guice.web.ShiroWebModule相同。
public class SecurityModule extends ShiroWebModule {
public static final Key<SecurityAuthenticationFilter> AUTHC_REST = Key.get(SecurityAuthenticationFilter.class);
...
@Override
protected void configureShiroWeb() {
...
// Add as filter
addFilterChain("/rest/login", ANON);
addFilterChain("/rest/**", AUTHC_REST);
...
}
}
对于shiro.ini文件,应按以下方式添加:
[main]
authc = package.path.to.SecurityAuthenticationFilter
[urls]
/rest/login = anon
/rest/** = authc
这应该有效:)
答案 1 :(得分:0)
:)我需要反过来,我想获得401
而不是重定向(302
)。你目前的设置是什么?你能从shiro.ini
文件配置吗?
答案 2 :(得分:0)
不确定您正在使用哪个技术堆栈,但在Java Web应用程序中,您可以在标记内的web.xml中对其进行配置。
<error-page>
<error-code>401</error-code>
<location>{path to custom page}</location>
</error-page>