CAS sso構成


最近ssoの単点登録の問題を研究して、ネット上の多くのケースとコードを研究して、いつも大きな違いがあることを発見して、最後に公式サイトを通じてダウンロードして、やっとcas 3とcas 4の配置に違いがあることを発見して、これは違いが大きい原因です.
公式サイトの住所は以下の通りです. https://www.apereo.org/search/node/cas
以下はcas 4のみについて整理しましょう.cas 4はcas 3に対して増加しているからです.
1.ダウンロード
アドレスhttp://downloads.jasig.org/
cas-server-4.0.0-release.tar.gz
cas-client-3.3.3-release.tar.gz
2.Sever側の構成
解凍cas-server-4.0.0 module/cas-server-webapp-4.0.0.warをTomcatのwebappsディレクトリにコピーし、cas.warと名前を変更し、Tomcatを起動して圧縮を解除
tomcatの起動
http://localhost:8080/casで、ログインページに入ります.
デフォルトのユーザーはcasuser/Mellonで、ログインに成功すると正常に起動し、cas 3のデフォルトのユーザーはなく、ユーザー名のパスワードだけでずっとできます.
2.1データベースを使用してユーザーを検証する設定
依存する必要があります:c 3 p 0-0.9.1.2.jar,mysql-connector-java-5.21.2.jar,cas-server-support-jdbc-4.0.0.jar,cas-server-support-ldap-4.0.0.jar
変更 deployerConfigContext.xml
1)       
  
   
    
    
    
      
      
     
     
2)  handler    

	
		
			
			 
			 
			
		
	

注記元のデフォルトユーザーは、データベースの代替を使用して、新しいデータベースtestを作成し、md 5暗号化を一時的に使用していません.データベースtestのusersテーブルはpasswdとnameを直接設定すればいいです.
3)  md5  ,          
 
	  
	
4)          

public class MyQueryDatabaseAuthenticationHandler extends AbstractJdbcUsernamePasswordAuthenticationHandler{
	@NotNull
    private String sql;
	
	@Override
	protected HandlerResult authenticateUsernamePasswordInternal(UsernamePasswordCredential credential)throws GeneralSecurityException, PreventedException {
		 final String username = credential.getUsername();
		   
		  final String encryptedPassword = this.getPasswordEncoder().encode(credential.getPassword()+"{"+username+"}");
	        try {
	            final String dbPassword = getJdbcTemplate().queryForObject(this.sql, String.class, username);
	            if (!dbPassword.equals(encryptedPassword)) {
	                throw new FailedLoginException("Password does not match value on record.");
	            }
	        } catch (final IncorrectResultSizeDataAccessException e) {
	            if (e.getActualSize() == 0) {
	                throw new AccountNotFoundException(username + " not found with SQL query");
	            } else {
	                throw new FailedLoginException("Multiple records found for " + username);
	            }
	        } catch (final DataAccessException e) {
	            throw new PreventedException("SQL exception while executing query for " + username, e);
	        }
	        return createHandlerResult(credential, new SimplePrincipal(username), null);
	}
	
    public void setSql(final String sql) {
        this.sql = sql;
    }
}

ここのパスワードは  パスワード{ユーザー名} 暗号化の方式、だからカスタマイズのパスワードを使って検査して、再起動して、テストは合格します
3.クライアント側の構成
3.1一般方式
testwebプロジェクトを新規作成し、ClientエンジニアリングWEB-INF/libの下にcas-client-core-3.2.1.jarパッケージを追加
  web.xml  :


  testWeb1
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  


 
 
    
        serverName
        http://localhost:8080
    
    
     


   CAS Single Sign Out Filter
   org.jasig.cas.client.session.SingleSignOutFilter




  CAS Authentication Filter
  org.jasig.cas.client.authentication.AuthenticationFilter
  
    casServerLoginUrl
    https://localhost:8080/cas/login
  




    CAS Validation Filter
    org.jasig.cas.client.validation.Cas10TicketValidationFilter
    
        casServerUrlPrefix
        https://localhost:8080/cas
    
    
        redirectAfterValidation
        true
    




  CAS HttpServletRequest Wrapper Filter
  org.jasig.cas.client.util.HttpServletRequestWrapperFilter




  CAS Assertion Thread Local Filter
  org.jasig.cas.client.util.AssertionThreadLocalFilter




   CAS Single Sign Out Filter
   /*


    CAS Authentication Filter
    /*


    CAS Validation Filter
    /*


    CAS HttpServletRequest Wrapper Filter
    /*


    CAS Assertion Thread Local Filter
    /*



    org.jasig.cas.client.session.SingleSignOutHttpSessionListener



     
        HelloWorldExample
        servlets.HelloWorld
    
    
        HelloWorldExample
        HelloWorldExample
      


ここではHelloWorld servletを設定してテストに合わせます
public class HelloWorld extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
        String username = principal.getName(); 
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("");
        out.println("");
        out.println("Hello World");
        out.println("");
        out.println("");
        out.println("

Hello World!"+username+"

");         out.println("");         out.println("");     } }

訪問localhost:8080/testWeb 1/HelloWorldExample ,最初のいずれかのページにアクセスすると、
https://localhost:8080/cas/login認証を行う
3.2 spring方式
ここではspring securityとcasを組み合わせた方法を採用します


	
	
	
	
	

	



	
	
	




	
	




	
	
	
	
	
	
		
		
			
		
	
	


	
	
	

	
		
	
	
	  
      
        
      
      
      
        
    
    
    
		
		
        
        
	

具体的なspring securityはcasの構成と結合して、参考にすることができますhttp://5148737.blog.51cto.com/5138737/1827795