zoukankan      html  css  js  c++  java
  • SSO单点登录

    应公司需求做单点登录,之前都没有听过这是啥东东,不过还好有度娘。网上有许多关于单点登录的文章,看了很多,感觉以下几篇文章相对较好。

    1.单点登录原理与简单实现:https://www.cnblogs.com/ywlaker/p/6113927.html

    2.SSO之CAS单点登录详细搭建教程:https://www.cnblogs.com/zhoubang521/p/5200407.html

    3.单点登录实践:https://blog.csdn.net/jadyer/article/category/5645879

    按照2中的步骤就可以搭建sso的一个demo。

    下面我主要说一下单点登录的自定义登录(server端)

    1.首先将cas-server的war包导入myeclipse或者eclipse中,使其能正常的访问。

    2.接下来就是修改原始的登录页面。修改登录就需要知道登录的流程是怎样的。

      cas的页面显示控制是集中在WEB-INFcas.properties中的cas.viewResolver.basename属性的,它的值默认是default_views,接下来cas会去classpath中寻找default_views.properties,在default_views.properties中指定了登录登出页面等.

      其中casLoginView.url表示默认登录页,casLoginGenericSuccessView.url表示默认登录成功页。

      在原来的casLoginView.jsp页面中,可以看出其body是用spring-webflow实现的,因此自定义登录页面必须也这样写。

      其中<form:input>标签是指通过form来生成input,因此要给input加上样式就必须使用

    1. cssClass用于指定表单元素CSS样式名,相当于HTML元素的class属性  
    2. cssStyle用于指定表单元素样式,相当于HTML元素的style属性
    3. cssErrorClass用于指定表单元素发生错误时对应的样式
    4. path属性用于绑定表单对象的属性值,它支持级联属性,比如path="user.userName"将调用表单对象getUser.getUserName()绑定表单对象的属性值

      接下来就是将表单提交。cas中的提交方法是在authenticationViaFormAction类。而authenticationViaFormAction类的定义是在cas-servlet.xml

      其登录对应的web-flow是login-webflow.xml。并且casLoginView.jsp就是在这里配置的。

    <view-state id="viewLoginForm" view="casLoginView" model="credential">
            <binder>
                <binding property="username" />
                <binding property="password" />
            </binder>
            <on-entry>
                <set name="viewScope.commandName" value="'credential'" />
            </on-entry>
            <transition on="submit" bind="true" validate="true" to="realSubmit">
                <evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credential)" />
            </transition>
        </view-state>

    其中view表示的就是视图(页面),model指的是对应bean,其属性有username和password。提交的方法是下面这个

    <action-state id="realSubmit">
            <evaluate expression="authenticationViaFormAction.submit(flowRequestContext, flowScope.credential, messageContext)" />
            <transition on="warn" to="warn" />
            <transition on="success" to="sendTicketGrantingTicket" />
            <transition on="successWithWarnings" to="showMessages" />
            <transition on="authenticationFailure" to="handleAuthenticationFailure" />
            <transition on="error" to="generateLoginTicket" />
        </action-state>

    其中transition指的是提交后的各种结果。其中authenticationFailure是登录校验后会出现的几种错误情况。

    <action-state id="handleAuthenticationFailure">
            <evaluate expression="authenticationExceptionHandler.handle(currentEvent.attributes.error, messageContext)" />
            <transition on="AccountLockedException" to="generateLoginTicket" />
            <transition on="AccountDisabledException" to="generateLoginTicket" />
            <transition on="InvalidLoginLocationException" to="generateLoginTicket" />
            <transition on="AccountNotFoundException" to="generateLoginTicket" />
            <transition on="FailedLoginException" to="generateLoginTicket" />
            <transition on="CredentialExpiredException" to="casExpiredPassView" />
            <transition on="InvalidLoginTimeException" to="casBadHoursView" />
            <transition on="UNKNOWN" to="generateLoginTicket" />
        </action-state>

    其中on表示的是cas已经定义好的异常处理类。to表示的所要跳转的页面。但是generateLoginTicket是指在当前页显示错误信息。而这些错误信息是在messages.properties中定义的。

    如果想要自定义异常则需要重写异常类authenticationExceptionHandler类。authenticationExceptionHandler类在cas_servlet.xml中定义的。

    可以按照https://blog.csdn.net/c233728461/article/details/56831306这篇文章介绍的实现。(但是我尝试了一下没有成功)

    个人觉得cas中已经自定义了一些异常,完全可以利用这些异常即可,没必要再自定义。详见https://blog.csdn.net/cl_andywin/article/details/53380117。

    对于cas还是不太了解,只能将其中一些心得和问题总结一下。

  • 相关阅读:
    汇编--立即数
    java mysql常用函数大全
    java springboot@GeneratedValue 注解
    java list.stream().map().collect(Collectors.toList())
    java 一种树的写法
    怎么查看当前进程?怎么执行退出?怎么查看当前路径?
    垃圾回收的优点和原理,并考虑2种回收机制?
    du 和 df 的定义,以及区别?
    通过什么命令查找执行命令?
    终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令?
  • 原文地址:https://www.cnblogs.com/smart-hwt/p/8889284.html
Copyright © 2011-2022 走看看