`
jinnianshilongnian
  • 浏览: 21502940 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2418412
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:3008649
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5639339
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:259895
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1597265
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:250207
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5858795
Group-logo
跟我学Nginx+Lua开...
浏览量:701941
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:785123
社区版块
存档分类
最新评论

第十五章 单点登录——《跟我学Shiro》

阅读更多

 

目录贴: 跟我学Shiro目录贴

 

Shiro 1.2开始提供了Jasig CAS单点登录的支持,单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个,无须多次登录。此处我们使用Jasig CAS v4.0.0-RC3版本:

https://github.com/Jasig/cas/tree/v4.0.0-RC3

 

Jasig CAS单点登录系统分为服务器端和客户端,服务器端提供单点登录,多个客户端(子系统)将跳转到该服务器进行登录验证,大体流程如下:

1、访问客户端需要登录的页面http://localhost:9080/ client/,此时会跳到单点登录服务器https://localhost:8443/ server/login?service=https://localhost:9443/ client/cas

2、如果此时单点登录服务器也没有登录的话,会显示登录表单页面,输入用户名/密码进行登录;

3、登录成功后服务器端会回调客户端传入的地址:https://localhost:9443/client/cas?ticket=ST-1-eh2cIo92F9syvoMs5DOg-cas01.example.org,且带着一个ticket

4、客户端会把ticket提交给服务器来验证ticket是否有效;如果有效服务器端将返回用户身份;

5、客户端可以再根据这个用户身份获取如当前系统用户/角色/权限信息。

 

本章使用了和《第十四章 SSL》一样的数字证书。

 

服务器端

我们使用了Jasig CAS服务器v4.0.0-RC3版本,可以到其官方的github下载:https://github.com/Jasig/cas/tree/v4.0.0-RC3下载,然后将其cas-server-webapp模块封装到shiro-example-chapter15-server模块中,具体请参考源码。

 

1、数字证书使用和《第十四章 SSL》一样的数字证书,即将localhost.keystore拷贝到shiro-example-chapter15-server模块根目录下;

 

2、在pom.xml中添加Jetty Maven插件,并添加SSL支持:

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>8.1.8.v20121106</version>
  <configuration>
    <webAppConfig>
      <contextPath>/${project.build.finalName}</contextPath>
    </webAppConfig>
    <connectors>
      <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
        <port>8080</port>
      </connector>
      <connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector">
        <port>8443</port>
        <keystore>${project.basedir}/localhost.keystore</keystore>
       <password>123456</password>
        <keyPassword>123456</keyPassword>
      </connector>
    </connectors>
  </configuration>
</plugin>

 

3、修改src/main/webapp/WEB-INF/deployerConfigContext.xml,找到primaryAuthenticationHandler,然后添加一个账户:

<entry key="zhang" value="123"/>

其也支持如JDBC查询,可以自己定制;具体请参考文档。

 

4mvn jetty:run启动服务器测试即可:

访问https://localhost:8443/chapter15-server/login将弹出如下登录页面:


 

输入用户名/密码,如zhang/123,将显示登录成功页面:


 

到此服务器端的简单配置就完成了。 

 

 

客户端

1、首先使用localhost.keystore导出数字证书(公钥)到D:\localhost.cer

keytool -export -alias localhost -file D:\localhost.cer -keystore D:\localhost.keystore 

 

2、因为CAS client需要使用该证书进行验证,需要将证书导入到JDK中: 

cd D:\jdk1.7.0_21\jre\lib\security
keytool -import -alias localhost -file D:\localhost.cer -noprompt -trustcacerts -storetype jks -keystore cacerts -storepass 123456 

如果导入失败,可以先把security 目录下的cacerts删掉; 

 

3、按照服务器端的Jetty Maven插件的配置方式配置Jetty插件;

 

4、在shiro-example-chapter15-client模块中导入shiro-cas依赖,具体请参考其pom.xml 

 

5、自定义CasRealm

public class MyCasRealm extends CasRealm {
    private UserService userService;
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        String username = (String)principals.getPrimaryPrincipal();
        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
        authorizationInfo.setRoles(userService.findRoles(username));
        authorizationInfo.setStringPermissions(userService.findPermissions(username));
        return authorizationInfo;
    }
} 

CasRealm根据CAS服务器端返回的用户身份获取相应的角色/权限信息。 

 

 

6spring-shiro-web.xml配置:

<bean id="casRealm" class="com.github.zhangkaitao.shiro.chapter13.realm.MyCasRealm">
    <property name="userService" ref="userService"/>
    ……
    <property name="casServerUrlPrefix" value="https://localhost:8443/chapter14-server"/>
    <property name="casService" value="https://localhost:9443/chapter14-client/cas"/>
</bean> 

casServerUrlPrefix:是CAS Server服务器端地址;

casService:是当前应用CAS服务URL,即用于接收并处理登录成功后的Ticket的;

 

如果角色/权限信息是由服务器端提供的话,我们可以直接使用CasRealm: 

<bean id="casRealm" class="org.apache.shiro.cas.CasRealm">
    ……
    <property name="defaultRoles" value="admin,user"/>
    <property name="defaultPermissions" value="user:create,user:update"/>
    <property name="roleAttributeNames" value="roles"/>
    <property name="permissionAttributeNames" value="permissions"/>
    <property name="casServerUrlPrefix" value="https://localhost:8443/chapter14-server"/>
    <property name="casService" value="https://localhost:9443/chapter14-client/cas"/>
</bean> 

defaultRoles/ defaultPermissions:默认添加给所有CAS登录成功用户的角色和权限信息;

roleAttributeNames/ permissionAttributeNames:角色属性/权限属性名称,如果用户的角色/权限信息是从服务器端返回的(即返回的CAS Principal中除了Principal之外还有如一些Attributes),此时可以使用roleAttributeNames/ permissionAttributeNames得到Attributes中的角色/权限数据;请自行查询CAS获取用户更多信息。

 

<bean id="casFilter" class="org.apache.shiro.cas.CasFilter">
    <property name="failureUrl" value="/casFailure.jsp"/>
</bean> 

CasFilter类似于FormAuthenticationFilter,只不过其验证服务器端返回的CAS Service Ticket。 

 

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager"/>
    <property name="loginUrl" value="https://localhost:8443/chapter14-server/login?service=https://localhost:9443/chapter14-client/cas"/>
    <property name="successUrl" value="/"/>
    <property name="filters">
        <util:map>
            <entry key="cas" value-ref="casFilter"/>
        </util:map>
    </property>
    <property name="filterChainDefinitions">
        <value>
            /casFailure.jsp = anon
            /cas = cas
            /logout = logout
            /** = user
        </value>
    </property>
</bean> 

loginUrlhttps://localhost:8443/chapter15-server/login表示服务端端登录地址,登录成功后跳转到?service参数对于的地址进行客户端验证及登录;

/cas=cas”:即/cas地址是服务器端回调地址,使用CasFilter获取Ticket进行登录。

 

7、测试,输入http://localhost:9080/chapter15-client地址进行测试即可,可以使用如Chrome开这debug观察网络请求的变化。

 

如果遇到以下异常,一般是证书导入错误造成的,请尝试重新导入,如果还是不行,有可能是运行应用的JDK和安装数字证书的JDK不是同一个造成的:

Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

       at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)

       at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)

       at sun.security.validator.Validator.validate(Validator.java:260)

       at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)

       at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)

       at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)

       at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)

       ... 67 more

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

       at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)

       at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)

       at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)

       ... 73 more

      

 

示例源代码:https://github.com/zhangkaitao/shiro-example;可加群 231889722 探讨Spring/Shiro技术。

        

  

请你欣赏春天美景 http://user.qzone.qq.com/314154083/photo/V10a4ot72FxYVR?ptlang=2052

16
8
分享到:
评论
24 楼 简简点点滴滴单单 2017-05-04  
gansuzxd 写道
zqb666kkk 写道
lehsyh 写道
您好,我也在用shiro做cas单点认证,自己写的casRealm类,继承了CasRealm,为什么在访问的时候,总是进入不了自定义的这个类中.但没有提示错误,可以进入系统,往指点下。

附部分配置
1)casRealm类:配置
<property name="casService" value="http://localhost:8080/demo/action"></property>

2)shiroFilter:配置
<property name="loginUrl" value="http://192.168.1.100:8088/cas-server/login?service=http://localhost:8080/demo/action" />
<property name="filters">
            <util:map>
                <entry key="cas"  value-ref="casFilter"/>
            </util:map>
        </property>
        <!-- url中有/action/则用cas拦截处理 -->
        <property name="filterChainDefinitions">
            <value>
        /action = cas
                /admin/** = roles[ROLE_USER] 
                /** = anon
           </value>
        </property>


我也遇到这个问题了



请问你们的问题解决掉了吗?

请问你们的问题解决了嘛?我现在也遇到这个问题啦,困在这里好久了, 群我也加不进去
23 楼 简简点点滴滴单单 2017-05-04  
lehsyh 写道
您好,我也在用shiro做cas单点认证,自己写的casRealm类,继承了CasRealm,为什么在访问的时候,总是进入不了自定义的这个类中.但没有提示错误,可以进入系统,往指点下。

附部分配置
1)casRealm类:配置
<property name="casService" value="http://localhost:8080/demo/action"></property>

2)shiroFilter:配置
<property name="loginUrl" value="http://192.168.1.100:8088/cas-server/login?service=http://localhost:8080/demo/action" />
<property name="filters">
            <util:map>
                <entry key="cas"  value-ref="casFilter"/>
            </util:map>
        </property>
        <!-- url中有/action/则用cas拦截处理 -->
        <property name="filterChainDefinitions">
            <value>
        /action = cas
                /admin/** = roles[ROLE_USER] 
                /** = anon
           </value>
        </property>


请问您这个问题有解决嘛?我现在的问题 和您一模一样,卡在这里好久啦,您能不能指点一下呀
22 楼 Laukitto 2017-04-27  
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching localhost found
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:326)
at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:305)
at org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:50)
at org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:207)
at org.apache.shiro.cas.CasRealm.doGetAuthenticationInfo(CasRealm.java:144)
at org.apache.shiro.realm.AuthenticatingRealm.getAuthenticationInfo(AuthenticatingRealm.java:568)
at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doSingleRealmAuthentication(ModularRealmAuthenticator.java:180)
at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:267)
at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198)
at org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106)
at org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:270)
at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:256)
at org.apache.shiro.web.filter.authc.AuthenticatingFilter.executeLogin(AuthenticatingFilter.java:53)
at org.apache.shiro.cas.CasFilter.onAccessDenied(CasFilter.java:85)
at org.apache.shiro.web.filter.AccessControlFilter.onAccessDenied(AccessControlFilter.java:133)
at org.apache.shiro.web.filter.AccessControlFilter.onPreHandle(AccessControlFilter.java:162)
at org.apache.shiro.web.filter.PathMatchingFilter.isFilterChainContinued(PathMatchingFilter.java:203)
at org.apache.shiro.web.filter.PathMatchingFilter.preHandle(PathMatchingFilter.java:178)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:131)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:365)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
at org.eclipse.jetty.server.ssl.SslSocketConnector$SslConnectorEndPoint.run(SslSocketConnector.java:670)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.security.cert.CertificateException: No name matching localhost found
at sun.security.util.HostnameChecker.matchDNS(HostnameChecker.java:221)
at sun.security.util.HostnameChecker.match(HostnameChecker.java:95)
at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:455)
at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:436)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:200)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491)
这是哪一步错了
21 楼 ynyee 2016-09-14  
tao哥,我使用官方最新的 cas-overlay-template 项目,自己生成证书配置到 jetty-ssl.xml 的配置文件中,启动也显示:

[STDOUT] 2016-09-14 16:27:32,011 WARN [org.jasig.cas.util.TGCCipherExecutor] - <Secret key for encryption is not defined. CAS will attempt to auto-generate the encryption key>
[STDOUT] 2016-09-14 16:27:32,015 WARN [org.jasig.cas.util.TGCCipherExecutor] - <Generated encryption key k1nslGOTOD7CZSYiMW_awii4Y1FroXuPJpIONC9xUKc of size 256. The generated key MUST be added to CAS settings.>
[STDOUT] 2016-09-14 16:27:32,015 WARN [org.jasig.cas.util.TGCCipherExecutor] - <Secret key for signing is not defined. CAS will attempt to auto-generate the signing key>
[STDOUT] 2016-09-14 16:27:32,016 WARN [org.jasig.cas.util.TGCCipherExecutor] - <Generated signing key NAuA9KbgSAnWrv2hV9MidattxPmWLq--MHUItBULCSm1UubKqSOugNpWyghZLMCrgF_daP98NKhyJL5nRxF6zg of size 512. The generated key MUST be added to CAS settings.>
[STDOUT] 2016-09-14 16:27:32,029 WARN [org.jasig.cas.util.WebflowCipherExecutor] - <Secret key for signing is not defined. CAS will attempt to auto-generate the signing key>
[STDOUT] 2016-09-14 16:27:32,029 WARN [org.jasig.cas.util.WebflowCipherExecutor] - <Generated signing key BZYvNW9xtp4v39Gjmo_KD0pNHMcJaEw3WNtNPT6v2a6sKxtCvD_Wi49hStTy2M-hTg8C8iccsbJG2Gsr4j1lNA of size 512. The generated key MUST be added to CAS settings.>
[STDOUT] 2016-09-14 16:27:32,029 WARN [org.jasig.cas.util.WebflowCipherExecutor] - <No encryption key is defined. CAS will attempt to auto-generate keys>
[STDOUT] 2016-09-14 16:27:32,030 WARN [org.jasig.cas.util.WebflowCipherExecutor] - <Generated encryption key AMyZesxtlHxvifSU of size 16. The generated key MUST be added to CAS settings.>
[STDOUT] 2016-09-14 16:27:33,736 INFO [org.jasig.cas.CasEnvironmentContextListener] - <[jetty/9.3.6.v20151106] has loaded the CAS servlet application context: Root WebApplicationContext: startup date [Wed Sep 14 16:27:29 CST 2016]; root of context hierarchy>
[STDERR] 2016-09-14 16:27:33.785:INFO:/cas:main: Initializing Spring FrameworkServlet 'cas'
[STDERR] 2016-09-14 16:27:33.911:INFO:oejsh.ContextHandler:main: Started o.e.j.m.p.JettyWebAppContext@7d68ef40{/cas,[file:///Users/yangyan/git/cas-overlay-template/src/main/webapp/, file:///Users/yangyan/git/cas-overlay-template/target/tmp/cas-server-webapp-4_2_5_war1/],AVAILABLE}
[STDERR] 2016-09-14 16:27:33.926:INFO:oejs.ServerConnector:main: Started ServerConnector@288c400c{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
[STDERR] 2016-09-14 16:27:33.933:INFO:oejus.SslContextFactory:main: x509=X509@efe75a2(client,h=[],w=[]) for SslContextFactory@a49cdd6(file:///private/etc/cas/jetty/clientkeystore,file:///private/etc/cas/jetty/clientkeystore)
[STDERR] 2016-09-14 16:27:34.025:INFO:oejs.ServerConnector:main: Started ServerConnector@545e200b{SSL,[ssl, http/1.1]}{0.0.0.0:8443}
[STDERR] 2016-09-14 16:27:34.026:INFO:oejs.Server:main: Started @6259ms


但是,用浏览器访问 8443 端口就打不开。使用telnet localhost 8443 返回:
yangyan-mac-pro:jetty yangyan$ telnet localhost 8443
Trying ::1...
Connected to localhost.

遇到这种情况,应该是哪里的问题?各种浏览器都试了,在Firefox里显示的提示是:
载入页面时与 localhost:8443 的连接被中断。

    您尝试查看的页面无法显示,因为已收到数据的可靠性无法证实。
    请联系此网站的管理员并告知此问题。

20 楼 草房子 2016-09-06  
我在测试客户端的时候,报如下错误,请帮忙指定错误原因:
九月 06, 2016 9:54:18 下午 org.jasig.cas.client.util.CommonUtils getResponseFromServer                                                                                                                             
严重: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: signature check failed                                                                
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: signature check failed
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
        at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1904)
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:279)
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:273)
        at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1446)
        at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:209)
        at sun.security.ssl.Handshaker.processLoop(Handshaker.java:901)
        at sun.security.ssl.Handshaker.process_record(Handshaker.java:837)
19 楼 qq_25403605 2016-05-14  
涛 哥,为什么client cas的时候CasToken 的 ticket 和 为null,但是如果是工程的根目录就可以。
18 楼 gansuzxd 2016-03-02  
zqb666kkk 写道
lehsyh 写道
您好,我也在用shiro做cas单点认证,自己写的casRealm类,继承了CasRealm,为什么在访问的时候,总是进入不了自定义的这个类中.但没有提示错误,可以进入系统,往指点下。

附部分配置
1)casRealm类:配置
<property name="casService" value="http://localhost:8080/demo/action"></property>

2)shiroFilter:配置
<property name="loginUrl" value="http://192.168.1.100:8088/cas-server/login?service=http://localhost:8080/demo/action" />
<property name="filters">
            <util:map>
                <entry key="cas"  value-ref="casFilter"/>
            </util:map>
        </property>
        <!-- url中有/action/则用cas拦截处理 -->
        <property name="filterChainDefinitions">
            <value>
        /action = cas
                /admin/** = roles[ROLE_USER] 
                /** = anon
           </value>
        </property>


我也遇到这个问题了



请问你们的问题解决掉了吗?
17 楼 生活的长老 2016-01-15  
哥,单点登出如何实现啊


两个客户端  logout一个客户端时,第二个客户端会监听到退出操作,但是源码中注销的是http session 而非shiro的session,如何解决啊?
16 楼 thrillerzw 2015-12-27  
peacherdiy 写道
刚开始出现:Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target这个异常,然后删除se
curity的cacerts文件,重新导入到jdk,在登陆http://localhost:9080/chapter15-client就出现下面的异了,怎么办?
java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter
must be non-empty 


这个问题解决了吗。我也遇到了。求回复。
15 楼 newboy2004 2015-12-14  
zqb666kkk 写道
lehsyh 写道
您好,我也在用shiro做cas单点认证,自己写的casRealm类,继承了CasRealm,为什么在访问的时候,总是进入不了自定义的这个类中.但没有提示错误,可以进入系统,往指点下。

附部分配置
1)casRealm类:配置
<property name="casService" value="http://localhost:8080/demo/action"></property>

2)shiroFilter:配置
<property name="loginUrl" value="http://192.168.1.100:8088/cas-server/login?service=http://localhost:8080/demo/action" />
<property name="filters">
            <util:map>
                <entry key="cas"  value-ref="casFilter"/>
            </util:map>
        </property>
        <!-- url中有/action/则用cas拦截处理 -->
        <property name="filterChainDefinitions">
            <value>
        /action = cas
                /admin/** = roles[ROLE_USER] 
                /** = anon
           </value>
        </property>


我也遇到这个问题了


地址部分统一换成https开头的试一下
14 楼 李洛生 2015-11-26  
哥,表示实现不了,CAS怎么引进来啊?怎么大的POM文件的Maven项目吗?
13 楼 zqb666kkk 2015-10-16  
lehsyh 写道
您好,我也在用shiro做cas单点认证,自己写的casRealm类,继承了CasRealm,为什么在访问的时候,总是进入不了自定义的这个类中.但没有提示错误,可以进入系统,往指点下。

附部分配置
1)casRealm类:配置
<property name="casService" value="http://localhost:8080/demo/action"></property>

2)shiroFilter:配置
<property name="loginUrl" value="http://192.168.1.100:8088/cas-server/login?service=http://localhost:8080/demo/action" />
<property name="filters">
            <util:map>
                <entry key="cas"  value-ref="casFilter"/>
            </util:map>
        </property>
        <!-- url中有/action/则用cas拦截处理 -->
        <property name="filterChainDefinitions">
            <value>
        /action = cas
                /admin/** = roles[ROLE_USER] 
                /** = anon
           </value>
        </property>


我也遇到这个问题了
12 楼 zqb666kkk 2015-09-29  
跨域的 单点登出怎么配置?
11 楼 小南超子 2015-06-04  
一直报循环重定向
10 楼 Animal 2015-04-01  
一个账号同时只能一个人登陆
如果一个账号现在一个台电脑上登陆 换了另一台登陆会把先前的挤掉 请问这个怎么实现
9 楼 iaiuiebuiu 2014-11-06  
高手啊,请问我碰到一个问题,登陆cas server后,返回客回客户端相关信息时,控制台xml解析错误 locale必须以分号结尾,这是什么原因呢,配置文件我加了转义符什么的,依然是这个错误。cas server返回的xml信息是动态生成的么?为什么还没做什么配置返回的信息就错误呢,原以为是cas客户端与cas-server版本不对应,但我都整成最新的了还是这个错 cas 4.0 cas client 3.几,帮看下呢。
8 楼 lovexiu1111 2014-09-30  
我在试验的过程中发现:如果是自定义用户认证,对于每种失败结果需要定义单独的exception。不知道各位有没有好的方法不用定义exception.
7 楼 joaboo 2014-07-10  
tao哥,单点登录讲的很详细,可是单点登出怎么做啊?
6 楼 lehsyh 2014-04-23  
涛 哥,单点这里难道一定要配置数字证书localhost.keystore吗,可以不需要不?我用tomcat做服务器
5 楼 lehsyh 2014-04-22  
您好,我也在用shiro做cas单点认证,自己写的casRealm类,继承了CasRealm,为什么在访问的时候,总是进入不了自定义的这个类中.但没有提示错误,可以进入系统,往指点下。

附部分配置
1)casRealm类:配置
<property name="casService" value="http://localhost:8080/demo/action"></property>

2)shiroFilter:配置
<property name="loginUrl" value="http://192.168.1.100:8088/cas-server/login?service=http://localhost:8080/demo/action" />
<property name="filters">
            <util:map>
                <entry key="cas"  value-ref="casFilter"/>
            </util:map>
        </property>
        <!-- url中有/action/则用cas拦截处理 -->
        <property name="filterChainDefinitions">
            <value>
        /action = cas
                /admin/** = roles[ROLE_USER] 
                /** = anon
           </value>
        </property>

相关推荐

    第十七章 OAuth2集成——《跟我学Shiro》 - 开涛的博客 - ITeye技术网站2

    在《跟我学Shiro》的第十七章中,作者开涛介绍了如何集成OAuth2,使用Apache Oltu作为OAuth2服务端的实现。实现中涉及以下关键部分: 1. **依赖**:引入了`authzserver`(授权服务器依赖)和`resourceserver`(资源...

    跟我一起学shiro 张开涛

    书中可能涵盖如何在Spring Boot、Spring MVC等常见框架中整合Shiro,以及如何解决实际开发中遇到的问题,比如跨域问题、单点登录等。 总的来说,《跟我一起学Shiro——张开涛》这本书是学习Shiro的宝贵资料,不仅...

    跟我学Shiro

    通过《跟我学Shiro》.pdf,你将学习到如何创建 Realm 实现数据源连接、配置 Shiro 安全框架、处理登录和登出逻辑、实现权限控制以及在实际项目中部署和调优 Shiro。 10. **最佳实践** 学习 Shiro 的过程中,了解...

    [资料][Java]跟我学Shiro教程_Java跟我学Shiro教程_shiro_

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供了认证、授权、加密和会话管理功能,可以非常方便地开发出足够安全的应用。...阅读 "[资料][Java]跟我学Shiro教程.pdf",你将得到更详细的步骤指导和实践案例。

    跟我学Shiro教程.rar

    "跟我学Shiro教程"这个资源显然是为了帮助学习者深入理解并掌握Shiro的核心概念和实际应用。 在Shiro的认证服务中,其主要目标是确认用户身份。这通常涉及用户登录过程,其中用户提供的凭证(如用户名和密码)被...

    跟我学shiro

    #### 十五、单点登录 - **概念**:用户只需一次登录就可以访问所有相关系统。 - **实现**: - **服务器端**:实现 SSO 的核心逻辑。 - **客户端**:与服务器端交互,完成 SSO 过程。 #### 十六、综合实例 - **...

    跟我学Shiro教程及其课程分章节源码

    Apache Shiro是一个强大易用的Java安全框架,...我找了一版 跟我学Shiro教程PDF,里面讲的很详细.里面还附带了每个章节的源码.值得你收藏哟!饮水思源——原文出自:http://jinnianshilongnian.iteye.com/blog/2049092

    跟我学Shiro-java开发+spring开发

    《跟我学Shiro-java开发+spring开发》是一个深入学习Java安全框架Shiro和Spring集成的教程,旨在帮助开发者掌握这两个关键技术在实际项目中的应用。Shiro是一个强大的且易用的Java安全框架,提供了认证、授权、加密...

    《跟我学Shiro》- 张开涛.txt

    ***txt文件中含有下载地址** 《跟我学Shiro》- 张开涛,PDF版本,带目录,清晰。 示例源代码:https://github.com/zhangkaitao/shiro-example; 加qun 231889722 探讨Spring/Shiro技术。

    Springboot+shiro单点登录实现.md

    Springboot+shiro单点登录实现,本文档是单点登录的全部源代码。

    shiro实现单点登录

    在IT行业中,单点登录(Single Sign-On,简称SSO)是一种身份验证机制,它允许用户在一个应用系统中登录后,无需再次认证即可访问其他相互信任的应用系统。Apache Shiro是一个强大且易用的Java安全框架,提供了认证...

    跟我学Shiro教程 pdf

    《跟我学Shiro》PDF完结版下载, Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不...

    shiro+spring+data+session+redis实现单点登录

    本案例聚焦于使用Apache Shiro、Spring、Spring Data以及Redis来实现单点登录功能,下面将详细解释这些组件以及它们如何协同工作。 **Apache Shiro** Apache Shiro是一款轻量级的安全框架,提供了认证、授权、会话...

    shiro+ springMVC + Redis+mysql 实现 单点登录

    "Shiro+SpringMVC+Redis+MySQL实现单点登录"是一个典型的系统安全架构,它整合了多个技术组件来构建一个高效、可靠的单点登录(Single Sign-On, SSO)解决方案。以下是关于这个主题的详细知识点: 1. **Apache ...

    shiro教程 跟我学Shiro教程

    "跟我学Shiro教程"资源包包含了全面学习Shiro所需的重要材料,包括文档和实践示例。 首先,我们来看《Apache_Shiro参考手册中文版.pdf》。这本书籍详细介绍了Shiro框架的各个组件和使用方法。通过阅读,你可以了解...

    SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录

    SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...

    跟我学Shiro第11章Demo

    在"跟我学Shiro第11章Demo"中,我们将深入探讨Shiro的核心组件,特别是其在缓存管理和会话管理中的应用。 首先,我们关注的是Cache缓存。Shiro支持缓存来提高性能,避免频繁的数据库查询。它允许开发者将敏感操作的...

    跟我学 Shiro - v1.1.rar

    Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Sp ring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所 ...

Global site tag (gtag.js) - Google Analytics