Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security Struts2授权_Security_Tomcat_Struts2_Spring Security_Roles - Fatal编程技术网

Security Struts2授权

Security Struts2授权,security,tomcat,struts2,spring-security,roles,Security,Tomcat,Struts2,Spring Security,Roles,我即将从大学毕业,拥有一个需要在学校实现的web应用程序,一切都很完美,需要在11月之前准备好,但我在处理安全问题时遇到了真正的麻烦。应用程序必须能够有具有一个或多个不同角色的不同用户,(用户1:角色:学生;用户2:管理员,用户3:教授,老板) 当用户登录时,应根据其角色将其重定向到不同的视图,然后如果他试图访问其角色不允许的资源,则应显示错误页面 这就是我迄今为止所尝试的: 方法1: 身份验证方法:在web.xml中指定为 <login-config> <auth-me

我即将从大学毕业,拥有一个需要在学校实现的web应用程序,一切都很完美,需要在11月之前准备好,但我在处理安全问题时遇到了真正的麻烦。应用程序必须能够有具有一个或多个不同角色的不同用户,(用户1:角色:学生;用户2:管理员,用户3:教授,老板)

当用户登录时,应根据其角色将其重定向到不同的视图,然后如果他试图访问其角色不允许的资源,则应显示错误页面

这就是我迄今为止所尝试的:

方法1:

身份验证方法:在web.xml中指定为

<login-config>
   <auth-method>FORM</auth-method>
   <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
   </form-login-config>
</login-config>

,它允许我们连接到数据库,并从需要映射到server.xml中的两个表中获取用户及其关联的角色:

<Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxActive="100" maxIdle="30" maxWait="1000" name="jdbc/sstt" password="pass" type="javax.sql.DataSource" url="jdbc:sqlserver://localhost;databaseName=BDTT" username="sa"/>

web.xml:

<security-constraint>

    <web-resource-collection>
        <web-resource-name>Students Only</web-resource-name>
        <url-pattern>/student/*</url-pattern>
    </web-resource-collection>

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

</security-constraint>

// Same mapping for professor, admin, and boss (/professor/* maps to professor role)

学生专用
/学生/*
学生
//教授、管理员和老板的映射相同(/professor/*映射到教授角色)
结果:每当我尝试访问受限区域时,例如,/members/(在web.xml中的安全约束内配置),它都会工作得很好,因此授权目标实现了

问题: 当我提交登录表单时,它会启动j_安全检查,因此我无法启动Struts2操作,该操作可以帮助我根据用户角色进行重定向。这是主要问题。一切都很完美,但在使用容器安全性登录后,我找不到重定向的方法

方法2:

身份验证方法:一个LoginAction类,用于查询数据库并检查密码是否正确。它还检查用户角色,在这里,我们应该能够返回类似“admin”或“student”的字符串,并重定向到相应的index.jsp资源,但只有在允许用户只有一个角色,但他们可以有多个角色的情况下,才有效,那么如何根据用户角色总数构建视图?我们将返回什么字符串

授权方法:我编写了一个自定义拦截器,它从会话中检索用户对象(只有当用户成功通过身份验证时,此用户对象才应该在会话中),然后在此处执行授权逻辑

问题: 无法找到根据几个角色构造视图的方法,拦截器的问题是它只保护我的操作,因此授权目标已实现,但仅在操作上实现,这意味着我可以编写/students/,并且URL将更改为/students/index.jsp,而无需尝试授权

其他计划

我在想也许我可以使用过滤器来实现授权(这样我可以保护动态和静态资源),但我不知道这是否是一个好的做法,因为我们已经配置了Struts2过滤器,它映射到/*

我还希望我可以使用JAASSpring Security,但我不知道我是否能做到这一点,根据角色进行身份验证、重定向和授权。我不想花更多的时间去发现我不能做我需要的事情,我只有很短的时间来完成这件事

其他问题

将jsp置于WEB-INF之下真的是一种好的实践吗?如果是这样,我应该将struts.xml中对jsp的所有访问重写为WEB-INF/jsp/students/index.jsp?(例如)。或者我应该坚持web.xml中定义的安全约束,以避免直接访问/jsp/*url模式


非常感谢您的时间和帮助。

方法1中的问题:您可以编写Struts2拦截器来实现您想要的

有关Spring安全性示例,请参见我对这个问题的回答


是的,将jsp放在WEB-INF文件夹下是一个很好的实践。请参见方法1中的问题:您可以编写Struts2拦截器来实现您想要的

有关Spring安全性示例,请参见我对这个问题的回答


是的,将jsp放在WEB-INF文件夹下是一个很好的实践。请参见

go with spring security,一旦您用它授权您的用户,您就可以告诉spring security在成功或失败时调用哪个类,对我来说,它更好、更灵活,无需使用spring security重新发明轮子,一旦您用它授权您的用户,您就可以告诉spring security在成功或失败时调用哪个类,对我来说,它更好、更灵活,不需要再重新发明轮子