cas+shiro实现不时时的去请求cas进行身份验证
cas+shiro不进行时时去cas验证身份信息,需要用shiro在当前系统有一份完整的认证机构。
那么有一个问题,什么时候去cas校验信息,目前的配置方式:
cas系统设置默认的浏览器session存活时间,当前系统的session存活时间为30分钟,那么当当前系统身份验证失败是,去cas校验。
这里涉及到一个非常重要的节点,就是shiro框架内部是怎么进行cas校验的呢,请看代码:
org.apache.shiro.web.filter.AccessControlFilterd还是所有默认验证类的父类,
父类中的redirectToLogin方法就是去请求cas服务器,重新获取验证信息
/**
* Convenience method for subclasses that merely acquires the {@link #getLoginUrl() getLoginUrl} and redirects
* the request to that url.
* <p/>
* <b>N.B.</b> If you want to issue a redirect with the intention of allowing the user to then return to their
* originally requested URL, don't use this method directly. Instead you should call
* {@link #saveRequestAndRedirectToLogin(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
* saveRequestAndRedirectToLogin(request,response)}, which will save the current request state so that it can
* be reconstructed and re-used after a successful login.
*
* @param request the incoming <code>ServletRequest</code>
* @param response the outgoing <code>ServletResponse</code>
* @throws IOException if an error occurs.
*/
protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException {
String loginUrl = getLoginUrl();
WebUtils.issueRedirect(request, response, loginUrl);
}
现在要解决一个问题,就是当前系统的身份验证信息过期了,这个时候页面向后台发起了一个ajax请求,那么后台拿到这个请求之后直接对这个请求进行转发到cas服务就会出现一个问题:跨域问题。
参考解决办法:因为我的所有后台除了首页是用默认的org.apache.shiro.web.filter.authc.AnonymousFilter类进行身份验证,其他的请求都是通过
org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter进行的权限验证,又因为PermissionsAuthorizationFilter继承了AccessControlFilterd
所以我的解决办法就是创建一个自己的PermissionsAuthorizationFilter覆盖AccessControlFilterd的redirectToLogin方法
import java.io.IOException; import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter; import com.chenrd.shiro.AuthorRuntimeException; /**
* 最最重要的一点,解决了页面没有刷新点击功能,但是后台的author已经被注销的情况下会去发送cas请求而产生的跨域问题
*
* @author chenrd
* @version 2015年12月11日
* @see MyPermissionsAuthorizationFilter
* @since
*/
public class MyPermissionsAuthorizationFilter extends PermissionsAuthorizationFilter
{ @Override
protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException {
throw new AuthorRuntimeException("身份异常,不进行转发到登录页面");
/*String loginUrl = getLoginUrl();
WebUtils.issueRedirect(request, response, loginUrl);*/
}
}
然后在shiro的配置文件里面修改如下:
<bean id="myPermissionsAuthorizationFilter" class="com.chenrd.shiro.filter.MyPermissionsAuthorizationFilter"/>
<bean id="filterChainManager" class="com.chenrd.shiro.filter.CustomDefaultFilterChainManager">
<property name="loginUrl" value="${cas.url}/login?service=${apply.url}/cas"/>
<property name="successUrl" value="/"/>
<property name="unauthorizedUrl" value="/authority"/>
<property name="customFilters">
<util:map>
<entry key="cas" value-ref="casFilter"/>
<!--替换默认的权限控制类-->
<entry key="perms" value-ref="myPermissionsAuthorizationFilter"/>
</util:map>
</property>
<property name="defaultFilterChainDefinitions">
<value>
/login=anon
/cas=cas
/jaxws/services/**=anon
/**=authc
</value>
</property>
</bean>
cas+shiro实现不时时的去请求cas进行身份验证的更多相关文章
- 用Retrofit发送请求中添加身份验证
用Retrofit发送请求中添加身份验证====================在安卓应用开发中, retrofit可以极大的方便发送http网络请求,不管是GET, POST, 还是PUT, DEL ...
- HTTP 请求未经客户端身份验证方案“Anonymous”授权。从服务器收到的身份验证标头为“Negotiate,NTLM”
转自:http://www.cnblogs.com/geqinggao/p/3270499.html 近来项目需要Web Service验证授权,一般有两种解决方案: 1.通过通过SOAP Heade ...
- HTTP 请求未经客户端身份验证方案“Anonymous”授权。
今天调取WebService的时候报: HTTP 请求未经客户端身份验证方案“Anonymous”授权. 解决办法: 配置文件里改: <basicHttpBinding> <bind ...
- cas+shiro统一注销原理解析
1,客户端发送一个注销请求到cas server,跟踪casorg.jasig.cas.CentralAuthenticationServiceImpl类的destroyTicketGrantingT ...
- 接口自动化测试遭遇问题,excel中取出来的json串,无法使用requests去请求解决办法
最近遭遇了一个问题,问题不大不小,想半天没想明白是哪里有问题,今天终于解决了 用python读取了excel用例中,body json字符串内容,然后requests去请求内容,结果一直报错,一直不明 ...
- iOS - WKWebView加载不受信任的https (因用到IP地址加端口号去请求数据)
1.描述:因公司域名临时出现问题,所以项目中引用到了IP地址加端口号去请求数据,因而造成在wkwebView中某些网址打不开,查看错误是因为服务器证书无效,实际就是不受信任; 2.解决办法:在plis ...
- 让网站不去请求favicon.ico图标
让网站不去请求favicon.ico图标 favicon.ico 图标用于收藏夹图标和浏览器标签上的显示,如果不设置,浏览器会请求网站根目录的这个图标,如果网站根目录也没有这图标会产生 404.出于优 ...
- Retrofit Token过期 重新请求Token再去请求接口
需求是这样的:请求接口A -- 服务器返回数据Token过期或失效 -- 重新请求Token并设置 -- 再去请求接口A 刚解决了这个问题,趁热打铁,写个博客记录一下:这个Token是添加到请求头里 ...
- (转)基于CAS实现单点登录(SSO):cas client端的退出问题
出处:http://blog.csdn.net/tch918/article/details/22276627 自从CAS 3.4就很好的支持了单点注销功能,配置也很简单. 之前版本因为在CAS服务器 ...
随机推荐
- (转)java中静态代码块的用法 static用法详解
一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来 ...
- 网络-->监控-->交换机端口流量监控
一.取交换机端口流量OID 针对交换机接口速率在100M及以下: in方向:1.3.6.1.2.1.2.2.1.10 out方向:1.3.6.1.2.1.2.2.1.16 针对交换机端口速率在百兆以上 ...
- HTML超标记语言
Html超文本标记语言,负责描绘Web世界的骨架. 〇.工具 http;//www.w3cchool.com.cn 一.Tim Bemers Lee 万维网之父: Html设计者: W3C创始人: ...
- Java 验证码、二维码
Java 验证码.二维码 资源 需要: jelly-core-1.7.0.GA.jar网站: http://lychie.github.io/products.html将下载下来的 jelly ...
- Spring 4 官方文档学习(十三)集成其他web框架
重点是通用配置,非常建议看一下!有助于理解Spring的ApplicationContext与Servlet Container的关系! 1.介绍 Spring Web Flow SWF目标是成为we ...
- C#方法中三个重要的参数:out、ref、params
备注:适用于初学者,自学于传智播客. 1.out参数. 概念:如果在一个方法中,返回多个相同类型值的时候,可以考虑返回一数组.但是返回多个不同类型值的时候,返回数组显然不能解决问题,这时就引入out参 ...
- ckeditor使用
安装: 下载CKEDITOR的文件,解压后复制到工程的WEBROOT目录下就OK! 引用CKEDITOR的JS文件: 新建JSP页面,添加其JS文件<script type="text ...
- map阶段动态获取CombineTextInputFormat各输入文件路径
老mr程序中map中conf的map.input.file参数只能获取获取CombineTextInputFormat的第一个输入文件,而新版mr程序则连第一个输入文件也无法获取,这是因为create ...
- 通过Guid获取DirectoryEntry对象
绑定DirectoryEntry对象通常有两种方法,一种是通过字符串(如通过ADsPath),一种是通过Guid(参见:http://msdn.microsoft.com/zh-cn/library/ ...
- mysql删除开放用户权限
来访用户ODBC 1,在本地的cmd中用root用户进入mysql2,创建一个ODBC的用户create user 'ODBC'@'localhost';查看用户是否创建成功select user,h ...