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进行身份验证的更多相关文章

  1. 用Retrofit发送请求中添加身份验证

    用Retrofit发送请求中添加身份验证====================在安卓应用开发中, retrofit可以极大的方便发送http网络请求,不管是GET, POST, 还是PUT, DEL ...

  2. HTTP 请求未经客户端身份验证方案“Anonymous”授权。从服务器收到的身份验证标头为“Negotiate,NTLM”

    转自:http://www.cnblogs.com/geqinggao/p/3270499.html 近来项目需要Web Service验证授权,一般有两种解决方案: 1.通过通过SOAP Heade ...

  3. HTTP 请求未经客户端身份验证方案“Anonymous”授权。

    今天调取WebService的时候报: HTTP 请求未经客户端身份验证方案“Anonymous”授权. 解决办法: 配置文件里改: <basicHttpBinding> <bind ...

  4. cas+shiro统一注销原理解析

    1,客户端发送一个注销请求到cas server,跟踪casorg.jasig.cas.CentralAuthenticationServiceImpl类的destroyTicketGrantingT ...

  5. 接口自动化测试遭遇问题,excel中取出来的json串,无法使用requests去请求解决办法

    最近遭遇了一个问题,问题不大不小,想半天没想明白是哪里有问题,今天终于解决了 用python读取了excel用例中,body json字符串内容,然后requests去请求内容,结果一直报错,一直不明 ...

  6. iOS - WKWebView加载不受信任的https (因用到IP地址加端口号去请求数据)

    1.描述:因公司域名临时出现问题,所以项目中引用到了IP地址加端口号去请求数据,因而造成在wkwebView中某些网址打不开,查看错误是因为服务器证书无效,实际就是不受信任; 2.解决办法:在plis ...

  7. 让网站不去请求favicon.ico图标

    让网站不去请求favicon.ico图标 favicon.ico 图标用于收藏夹图标和浏览器标签上的显示,如果不设置,浏览器会请求网站根目录的这个图标,如果网站根目录也没有这图标会产生 404.出于优 ...

  8. Retrofit Token过期 重新请求Token再去请求接口

    需求是这样的:请求接口A -- 服务器返回数据Token过期或失效  -- 重新请求Token并设置 -- 再去请求接口A 刚解决了这个问题,趁热打铁,写个博客记录一下:这个Token是添加到请求头里 ...

  9. (转)基于CAS实现单点登录(SSO):cas client端的退出问题

    出处:http://blog.csdn.net/tch918/article/details/22276627 自从CAS 3.4就很好的支持了单点注销功能,配置也很简单. 之前版本因为在CAS服务器 ...

随机推荐

  1. Android获取时间

    java代码: import java.text.SimpleDateFormat;SimpleDateFormat formatter = new SimpleDateFormat ('yyyy年M ...

  2. Python在Windows下安装第三方库浅谈

    在用python编写代码时,往往需要用到第三方库,那么python如何去用第三方库呢,首先我们先来看看是如何安装的,方法可能会很多,但这边只介绍一种,其它请百度或google 比如asyncio,这里 ...

  3. Android WIFI 分析(二)

    本文介绍Wifi 分析线路二:在Setting中打开WiFi功能.扫描网络以及连接网络的流程. WifiSettings 无线网络设置界面 WifiEnabler 相当于无线网络设置开关 WifiDi ...

  4. 在css嵌套中的html的table里的字左右不对齐

    [现象]AAAA与天数的数字左右不居中 <table border=1 align="center"> <tr> <td width="20 ...

  5. as3自定义事件

    package EventPackage { import flash.events.Event; /** * * @author tqr <br /> * 创建时间:2015-2-6 下 ...

  6. 【转】三十分钟掌握STL

    转自http://net.pku.edu.cn/~yhf/UsingSTL.htm 三十分钟掌握STL 这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以 ...

  7. POJ 3469 Dual Core CPU 最大流

    划分成两个集合使费用最小,可以转成最小割,既最大流. //#pragma comment(linker, "/STACK:1024000000,1024000000") #incl ...

  8. 查看应用程序使用的所有dll

    VS2008命令提示符下: >dumpbin.exe   /dependents  <文件路径+文件名> □

  9. putpixel

    from PIL import Imageimg = Image.open("D:\Python27\ggg.gif")(w,h) = img.sizeim=img.convert ...

  10. Backbone.js

    Backbone.js是一套JavaScript框架與RESTful JSON的應用程式介面.也是一套大致上符合MVC架構的編程範型.Backbone.js以輕量為特色,只需依賴一套Javascrip ...