- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
现在我已经使用带有 spring 框架的 java 开发了一个网络应用程序。出于安全目的,我还使用了 spring security 3.0。
我通过数据库、URL 访问及其默认 session 管理使用 spring security 进行用户登录身份验证。现在,我愿意从表单动态应用 URL 权限,而不是在 XML 文件上定义,我发现这在 spring 安全性中有点困难。
Struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="false" />
<constant name="struts.action.excludePattern" value="/j_spring_security_check" />
<constant name="struts.action.excludePattern"
value="/j_spring_security_check.*,.*\\.j_spring_security_check" />
<package name="lms" extends="struts-default,json-default">
<!-- /** defining result types for implementing tiles **/ -->
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
<result-type name="json" class="org.apache.struts2.json.JSONResult" />
</result-types>
<interceptors>
<interceptor name="json"
class="org.apache.struts2.json.JSONInterceptor" />
<!-- <interceptor-stack name="storeStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="store">
<param name="operationMode">STORE</param>
</interceptor-ref>
</interceptor-stack>
<interceptor-stack name="retrieveStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
</interceptor-stack> -->
</interceptors>
<!-- <interceptors>
<interceptor-stack name="storeStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="store">
<param name="operationMode">STORE</param>
</interceptor-ref>
</interceptor-stack>
<interceptor-stack name="retrieveStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
</interceptor-stack>
</interceptors> -->
<action name="lead_home">
<result type="tiles">lead_tiles</result>
</action>
<action name="">
<result></result>
</action>
<action name="baseTemplate">
<result>/dashboard.jsp</result>
</action>
</package>
<!-- #####[Lead_Setup_Source]#### -->
<package name="lead_setup_source" namespace="/lead/setup/source" extends="lms">
<action name="getForm" class="com.tpc.action.LeadSourceAction">
<result type="tiles">setup_lead_source</result>
</action>
<action name="formAction" method="actionTriggerLeadSource"
class="com.tpc.action.LeadSourceAction">
<result name="SAVE_SUCCESS" type="redirectAction">
<param name="actionName">getList</param>
<param name="action_msg">${action_msg}</param>
</result>
<result name="SAVE_ERROR" type="tiles">setup_lead_source</result>
<result name="UPDATE_ERROR" type="tiles">setup_lead_source</result>
<result name="DELETE_ERROR" type="tiles">setup_lead_source</result>
<result name="UPDATE_SUCCESS" type="redirectAction">
<param name="actionName">getList</param>
<param name="action_msg">${action_msg}</param>
</result>
<result name="DELETE_SUCCESS" type="redirectAction">
<param name="actionName">getList</param>
<param name="action_msg">${action_msg}</param>
</result>
<result name="NEW_SUCCESS" type="redirect">getForm</result>
</action>
<action name="getById" method="actionGetLeadSource"
class="com.tpc.action.LeadSourceAction">
<result name="success" type="tiles">setup_lead_source</result>
</action>
<action name="getList" method="actionGetListLeadSource"
class="com.tpc.action.LeadSourceAction">
<result name="success" type="tiles">setup_lead_source_list</result>
</action>
</package>
<!-- #####[Lead_Source_Event]#### -->
<package name="lead_setup_source_event" namespace="/lead/setup/source_event" extends="lms">
<action name="getForm" method="loadLeadSourceEventForm" class="com.tpc.action.LeadSourceEventAction">
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
<result name="success" type="tiles">setup_lead_source_event</result>
<result name="error" type="tiles">setup_lead_source_event</result>
</action>
<action name="formAction" method="triggerAction" class="com.tpc.action.LeadSourceEventAction">
<interceptor-ref name="store">
<param name="operationMode">STORE</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result name="CREATE_SUCCESS" type="redirectAction">
<param name="actionName">getList</param>
<param name="lead_source_e_id">${lead_source_e_id}</param>
</result>
<result name="CREATE_ERROR" type="redirectAction">getForm</result>
<result name="GET_SUCCESS" type="tiles">setup_lead_source_event
</result>
<result name="UPDATE_SUCCESS" type="redirectAction">
<param name="actionName">getList</param>
<param name="lead_source_e_id">${lead_source_e_id}</param>
</result>
<result name="UPDATE_ERROR" type="redirectAction">getById</result>
<result name="DELETE_SUCCESS" type="redirectAction">getList
</result>
<result name="DELETE_ERROR" type="redirectAction">getList
</result>
<result name="error" type="tiles">setup_lead_source_event
</result>
</action>
<action name="getById" method="actionGetLeadSourceEvent" class="com.tpc.action.LeadSourceEventAction">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
<result name="success" type="tiles">setup_lead_source_event
</result>
<result name="error" type="tiles">setup_lead_source_event</result>
</action>
<action name="getList" method="actionGetLeadSourceEventList" class="com.tpc.action.LeadSourceEventAction">
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
<result name="success" type="tiles">list_lead_source_event
</result>
<result name="error" type="tiles">list_lead_source_event</result>
</action>
</package>
</struts>
spring-security.xml
<?xml version="1.0" encoding="UTF-8" ?>
<b:beans xmlns="http://www.springframework.org/schema/security"
xmlns:b="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<http realm="Project Realm" auto-config="true" use-expressions="true">
<!-- Lead Source Setup -->
<intercept-url pattern="/lead/setup/source/**" access="hasAnyRole('ROLE_ADMIN','ROLE_DIRECTOR','ROLE_LEAD_MANAGER')"/>
<!-- Lead Source Event -->
<intercept-url pattern="/lead/setup/source_event/**" access="hasAnyRole('ROLE_ADMIN','ROLE_DIRECTOR','ROLE_LEAD_MANAGER','ROLE_LEAD_OFFICER')"/>
<intercept-url pattern="/lead/lead_home" access="hasAnyRole('ROLE_ADMIN','ROLE_DIRECTOR','ROLE_LEAD_MANAGER','ROLE_LEAD_OFFICER')"/>
<!-- ******END OF LEAD ******END OF LEAD ******END OF LEAD ******END OF LEAD ******END OF LEAD ******END OF LEAD ******END OF LEAD ****** -->
<intercept-url pattern="/annapurnaERP/**" access="hasAnyRole('ROLE_ADMIN','ROLE_DIRECTOR')"/>
<form-login login-page="/login.jsp" default-target-url="/dashboard.jsp"
authentication-failure-url="/login.jsp?login_error=1"/>
<logout logout-success-url="/login.jsp"/>
<remember-me />
</http>
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="
SELECT USERNAME, PASSWORD, CASE ENABLED WHEN 1 THEN 'true' ELSE 'false' END 'ENABLED'
FROM SETUP_SYSTEM_USER_CREDIENTIALS
WHERE USERNAME=?;"
authorities-by-username-query="
SELECT u.USERNAME, r.ROLES
FROM SETUP_SYSTEM_USER_CREDIENTIALS u, SETUP_SYSTEM_STAFF_USER_ROLES r
WHERE u.SSUR_ID = r.SSUR_ID
AND u.USERNAME=?;"
/>
</authentication-provider>
</authentication-manager>
</b:beans>
因此,如您所见,所有 URL 模式都在此 xml 文件中定义。那么如何从表单中动态定义这些 URL 模式。顺便说一下,现在我的项目运行良好,只是想添加一些动态。
好吧,假设我有两种不同的形式,一种用于管理员,另一种用于普通用户。要为管理员和普通用户设置访问这两种形式的用户权限,现在我必须从 xml 文件中进行。就像在下面的例子中一样,管理员有访问两种形式的用户权限,而 LEAD_OFFICER(普通用户)只能访问第二种形式。
<-- Lead Source Setup -->
<intercept-url pattern="/lead/setup/source/**" access="hasAnyRole('ROLE_ADMIN','ROLE_DIRECTOR')"/>
<!-- Lead Source Event -->
<intercept-url pattern="/lead/setup/source_event/**" access="hasAnyRole('ROLE_ADMIN','ROLE_DIRECTOR','ROLE_LEAD_OFFICER')"/>
现在这些都设置在xml文件中。如果有新用户,我必须手动添加此 xml 文件。但我想做的是从 UI FORM 向新用户分配所需的权限。现在我不知道该怎么做。所以任何帮助将不胜感激。谢谢
最佳答案
将此行添加到 jsp,<img src="<s:url value="YourUrlCreationAction" />">
并且在此 UrlCreationAction 类中,您可以添加代码以动态创建 Urls
关于java - 使用带有 Struts2 的 Spring Security 的表单的动态 URL 访问权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23751281/
假设我拥有域 mydomain.com,并且我在服务器上有一个 Web 应用程序,网址为 http://99.99.99.99:1234/MyApplication/startpage.somethi
我正在尝试通过以下方式更新已解析的 URL: u, _ := url.Parse(s) if u.Scheme == "" { u.Scheme = "https" } if u.Path =
如何将 www.somesite.com/api(.*) 映射到 www.somesite.com/$1:9000? (我需要将/api 映射到运行 @ 端口 9000 的 Play 框架应用程序)
我有一个资源结构,如航类 > 座位 > 预订,所以预订属于某个航类的某个座位: http://example.com/jdf_3prGPS4/1/jMBDy46PbNc
我想知道以下网址是否有效。 路径中的点,在主机之后: http://www.example.com/v.b.w..com 主机中的点,作为子域的一部分: http://v.b.w..co.manufa
我有两个域 - crmpicco.co.uk 和 ayrshireminis.com - 如果我浏览到: www.crmpicco.co.uk/mini/new我希望能够重定向到 www.ayrshi
我正在尝试使用 URL 重写和应用程序请求路由来重写到外部 URL。我设置了以下规则: 在规则中,“patternToMatch”是我试
我已经安装了带有 SharePoint 和 Url Rewrite 模块的 IIS 7.0。 是以下句子还是我配置错误才能看到这个结果? Url Redirect 可以将 url 重定向到任何内部(在
我想知道,为了获得良好的 SEO,您必须在 URL 中使用自然语言。您知道字符中单词或短语的最大大小吗?例如: www.me.com/this-is-a-really-long-url.htm 我问这
有人知道在 SEO 友好 URL 中使用逗号有什么问题吗?我正在使用一些在其 SEO 友好 URL 中使用大量逗号的软件;但我 100% 肯定我见过一些程序/平台无法正确识别 URL 并在第一个逗号后
我有一个网站,我正在为所有链接使用干净的 URL。我想知道对于简短的基本 URL 与较长的描述性 URL 有何看法。 例如,如果我的网站是关于 Georgia Bulldog 足球新闻的,那么哪个网站
我正在编写一个类似于 tinyurl 的 URL 缩短器,我想知道如何跟踪已经使用我的服务缩短的 URL?例如,tinyurl 为相同的长 URL 生成相同的小 URL,而不管是谁创建的。如
我是 magento 的新手。我正在开发一个模块。为此,我有一些要显示链接的 css 和 js 文件。我目前有类似 的链接 getSkinUrl('module_tryouts/css/jquery.
我想基于 HTTP_URL 重写 URL 以重定向到不同的端口,同时保留其余的 URL 和查询字符串(如果指定)。例如, http://host/john/page.aspx 应该重定向到 http:
我遇到了以下问题: 我的 Grails (2.2.0) 应用程序具有以下 URL 映射: "/api/clientQuote/$labcode/$cliCode/$quoCode"(controlle
我有一个很长的 URL,它不适合 URL 字段。它一直在修剪。该怎么办?有没有办法增加 SharePoint 2010 中的 URL 字段字符限制? 或者解决方法来容纳长 URL。例如,以下 URL
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我们从客户以前的开发人员那里继承了相当多的 Google Apps 脚本项目。 Apps 脚本通过嵌入式小部件部署在 Google 网站 (sites.google.com) 的各个页面上。每当我们需
我正在编写一些文档,但遇到了一些词汇问题: http://www.example.com/en/public/img/logo.gif 被称为“绝对”网址,对吗? ../../public/img/l
我们从客户以前的开发人员那里继承了相当多的 Google Apps 脚本项目。 Apps 脚本通过嵌入式小部件部署在 Google 网站 (sites.google.com) 的各个页面上。每当我们需
我是一名优秀的程序员,十分优秀!