ala*_*lan 13 java authentication login shiro
我有一个使用Shiro进行身份验证的webapp.web.xml和shiro.ini的相关部分是:
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
和
[main]
authc.loginUrl = /authoring/login.html
authc.successUrl = /authoring
logout.redirectUrl = /authoring/login.html
[users]
foo = foo
[urls]
/authoring/logout = logout
/authoring/** = authc
Run Code Online (Sandbox Code Playgroud)
Shiro正确拦截来自未经身份验证的客户端的所有请求,并重定向到已配置的loginUrl(然后在成功进行身份验证后将其转发到请求的页面).我希望发生的是,如果经过身份验证的客户端向/authoring/login.html发出明确请求,则将其重定向到/ authoring.只有在客户端通过身份验证时才会发生这种情况.
例如,想一想Gmail的工作原理 - 在您登录后尝试访问mail.google.com(甚至https://accounts.google.com/ServiceLogin)会将您重定向到收件箱.Shiro可以开箱了吗?如果没有,那么实施它的正确方法是什么?
您可以自己处理登录请求或使用您的框架,您需要更改shiro.ini为使用PassThruAuthenticationFilter
authc = org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter
Run Code Online (Sandbox Code Playgroud)
您现在可以检查用户是否已登录,如果是则重定向:
Subject currentUser = SecurityUtils.getSubject();
if(currentUser.isAuthenticated()){
//redirect
}else{
AuthenticationToken token = new UsernamePasswordToken(username, password);
currentUser.login(token);
WebUtils.redirectToSavedRequest(request, response, "index.xhtml");
}
Run Code Online (Sandbox Code Playgroud)
这不是一个完全开箱即用的解决方案。我不确定您是否可以在身份验证之外获取成功网址,您可以手动重定向WebUtils.issueRedirect(req, resp, url)
| 归档时间: |
|
| 查看次数: |
8775 次 |
| 最近记录: |