java - Tomcat 中的单点登录实现

标签 java tomcat jsf

我在 tomcat Web 服务器上部署了三个 jsf Web 应用程序,并启用了 SSL/TLS。现在我想构建某种具有特定角色的 SSO 身份验证。在 tomcat conf/server.xml 中有一行:

<Valve className="org.apache.catalina.authenticator.SingleSignOn" />

所以我知道 tomcat 可能有自己的 SSO 实现。有谁知道在哪里可以找到有关此内容或一些代码示例的更多信息?

提前致谢

最佳答案

经过几个小时的研究,我找到了解决方案,因此我将其发布在这里,以防有人需要在 tomcat 中进行 SSO 身份验证。 首先打开tomcat安装目录中的conf/server.xml文件并添加以下行:

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    </Host>

通过执行此操作,您已打开 SSO 阀门。接下来,您需要在 tomcat 中设置角色。这是通过编辑conf/tomcat-users.xml 来完成的。滚动到底部并添加角色,如下所示:

   <role rolename="CUSTOMER"/>
   <role rolename="ADMIN"/>

现在,如果您想要纯文本身份验证,您还可以通过添加以下内容来添加用户:

<user username="admin" password="admin" roles="ADMIN"/>
<user username="customer" password="customer" roles="CUSTOMER"/>

或者,如果你有数据库,你可以在conf/server.xml中设置与数据库服务器的连接,我使用的是MySQL:

<Realm className="org.apache.catalina.realm.JDBCRealm"
  driverName="com.mysql.cj.jdbc.Driver"
   connectionURL="jdbc:mysql://localhost:3306/databaseName?user=serverUsername&amp;password=serverPassword"
       userTable="usersTable" userNameCol="usernameColumnName" userCredCol="passwordColumnName"
   userRoleTable="roleTable" roleNameCol="roleColumnName"/>

注意:您需要在 tomcat lib 目录中提供连接驱动程序。 更多信息:https://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#JDBCRealm

最后在您的一个或多个网络应用程序中,找到 web.xml 并添加安全约束:

<security-constraint>

 <web-resource-collection>
 <web-resource-name>Protected Context</web-resource-name>
 <url-pattern>/*</url-pattern>
 </web-resource-collection>

 <user-data-constraint>
 <transport-guarantee>CONFIDENTIAL</transport-guarantee>  
 </user-data-constraint>

 <auth-constraint>
        <role-name>ADMIN</role-name>
    </auth-constraint>

 </security-constraint>

  <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>this is ignored currently</realm-name>
    </login-config>


<security-role>
    <role-name>ADMIN</role-name>
</security-role>

注意:如果您有自定义登录页面,您可以编辑 <login-config>标记并更改为以下内容:

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>file</realm-name>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
</login-config>

干杯。

关于java - Tomcat 中的单点登录实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60873769/

相关文章:

java - 迭代数组的排列

Java 循环 - 不断请求用户输入

tomcat.util.scan.DefaultJarScanner.jarsToSkip 属性不起作用

java - Tomcat 在 https 中编码重定向

java - 无法在 Spring Boot 应用程序中配置 ViewResolver

validation - 我应该在 JSF 1.2/2.0/2.1 中使用什么 DTD 来验证我的配置 XML?

css - JSF 最后添加自定义 css

java - 下载像 hotstar 这样的离线视频

java - 检查java中是否存在char

java - f :viewParam with Converter and ViewScoped exception out when invoke the second ajax request