基于JDBCRealm FORM的身份验证不会重定向到登录页面

时间:2017-04-22 13:51:54

标签: java security tomcat form-authentication

我正在尝试在index.jsp页面中应用身份验证,但是当我尝试加载此页面时,而不是重定向到login2.xhtml页面。我在镀铬窗口上看到了这个。

this is realm tag from servlet.xml

这是在server.xml中添加的领域标记

<Realm className="org.apache.catalina.realm.JDBCRealm"

       driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
   connectionURL="jdbc:sqlserver://DESKTOP-ND3EINK\SQLEXPRESS;databaseName=HRSystem;user=ram;password=ram"

       userTable="HR.users" userNameCol="user_name" userCredCol="user_pass"
   userRoleTable="HR.user_roles" roleNameCol="role_name"/>

我在tomcat-users.xml中添加了用户

 <role rolename="tomcat"/> 
  <role rolename="HRPersonnel"/>

  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="r@r.com" password="111111" roles="HRPersonnel"/>

和web.xml是:

<security-constraint>

        <display-name>SecurityConstraint</display-name>

        <web-resource-collection>
            <web-resource-name>foo bar</web-resource-name>
            <url-pattern>/index.jsp</url-pattern>
<!--
            <http-method>GET</http-method>
            <http-method>PUT</http-method>
            <http-method>POST</http-method>
            <http-method>DELETE</http-method> -->

        </web-resource-collection>

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

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

    </security-constraint>


    <login-config>
        <auth-method> FORM</auth-method>
        <realm-name>org.apache.catalina.realm.JDBCRealm</realm-name>
        <form-login-config>
            <form-login-page>/login2.xhtml</form-login-page>
            <form-error-page>/error.xhtml</form-error-page>
        </form-login-config>
    </login-config>

这些是数据库中的表

create table HR.users(
name varchar(50),
user_name varchar(50) primary key,
user_pass varchar(50) not null,
phone varchar (14),
address varchar(100),
)

create table HR.user_roles (
  user_name         varchar(50) not null foreign key references HR.users(user_name),
  role_name varchar(50) not null CHECK (role_name = 'Applicant' OR role_name = 'Manager' OR role_name = 'SME' or role_name = 'HRPersonnel')

  primary key (user_name, role_name)
  );

Catalina.log有1个警告,但没有错误。

22-Apr-2017 19:00:21.929 WARNING [main] org.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with directory [C:\Program Files\Java\apache-tomcat-9.0.0.M13\bin\com.microsoft.sqlserver.jdbc.SQLServerDriver], exists: [false], isDirectory: [false], canRead: [false]

2 个答案:

答案 0 :(得分:0)

我不知道为什么,但

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

无效,我将机密改为NONE,它开始起作用。

答案 1 :(得分:-1)

如果您定义JDBCRealm,则必须在数据库中定义用户表。

您必须在HR.users表格中定义您的用户。

查看catalina日志文件以获取更多信息。