Struts 2 与 Apache Shiro 集成时如何显示结果页面
使用: struts2 2.5.10, 春天 4.x, struts2-spring-插件2.5.10, 希罗1.4.0, Shiro-Spring 1.4.0。 网络.xml: 使用: struts2 2.5.10, 春季 4.x, struts2-spring-插件2.5.10, 四郎1.4.0, shiro-spring 1.4.0. web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:beans.xml</param-value> </context-param> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> </filter> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- shiro filter mapping has to be first --> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> beanx.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="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.xsd "> <bean name="loginAction" class="example.shiro.action.LoginAction" > </bean> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/login.jsp" /> <property name="filterChainDefinitions"> <value> /login.jsp = authc /logout = logout /* = authc </value> </property> </bean> <bean id="iniRealm" class="org.apache.shiro.realm.text.IniRealm"> <property name="resourcePath" value="classpath:shiro.ini" /> </bean> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="iniRealm" /> </bean> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> </beans> 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="true" /> <package name="default" extends="struts-default"> <action name="list" class="loginAction" method="list"> <result name="success">/success.jsp</result> <result name="error">error.jsp</result> </action> </package> </struts> index.jsp: <body> <s:action name="list" /> </body> login.jsp 看起来像: <form name="loginform" action="" method="post"> <table align="left" border="0" cellspacing="0" cellpadding="3"> <tr> <td>Username:</td> <td><input type="text" name="username" maxlength="30"></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="password" maxlength="30"></td> </tr> <tr> <td colspan="2" align="left"><input type="checkbox" name="rememberMe"><font size="2">Remember Me</font></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" name="submit" value="Login"></td> </tr> </table> </form> LoginAction.list(): public String list() { Subject currentUser = SecurityUtils.getSubject(); if(currentUser.isAuthenticated()) {System.out.println("user : "+currentUser.getPrincipal()); System.out.println("You are authenticated!"); } else { System.out.println("Hey hacker, hands up!"); } return "success"; } shiro.ini: [users] root=123,admin guest=456,guest frank=789,roleA,roleB # role name=permission1,permission2,..,permissionN [roles] admin=* roleA=lightsaber:* roleB=winnebago:drive:eagle5 index.jsp、login.jsp、success.jsp放在webapp下 我想要的是:输入LoginAction.list()需要进行身份验证,如果登录成功,则运行LoginAction.list()并返回"success"然后显示定义为Struts操作结果的success.jsp。 现在登录成功后可以执行LoginAction.list(),但是success.jsp不显示,浏览器是空白页面。 为什么? 我找到了原因:我在index.jsp中使用了<s:action name="list" />,但是struts文档说如果我们想用<s:action>看到结果页面,那么我们必须将其属性executeResult设置为true,即就像<s:action name="list" executeResult="true"/>。 在我看来,这有点奇怪,这个属性默认应该是 true。 有一个示例,您应该如何使用 Shiro applicationContext.xml 进行配置: <property name="filterChainDefinitions"> <value> # some example chain definitions: /admin/** = authc, roles[admin] /** = authc # more URL-to-FilterChain definitions here </value> </property> 以 /admin/ 开头的 URL 通过角色 admin 进行保护,任何其他 URL 均不受保护。如果 Struts 操作和结果 JSP 不在受保护区域中,则会显示它们。
Collections.sort(list) 和 Collections.sort(list,comparator) 的区别
有什么区别: 公共飞兔(){ 列表=新的ArrayList(); } 公共无效排序(比较器 comp){ Collections.sort(列表...
Dart 中是否有更好/更快的方法来旋转列表? 列表旋转(列表l,int i){ i = i % l.长度; 列表 x = l.sublist(i); x.addAll(l.sublist(0, ... Dart 中是否有更好/更快的方法来旋转列表? List<Object> rotate(List<Object> l, int i) { i = i % l.length; List<Object> x = l.sublist(i); x.addAll(l.sublist(0, i)); return x; } 可以简化一点 List<Object> rotate(List<Object> list, int v) { if(list == null || list.isEmpty) return list; var i = v % list.length; return list.sublist(i)..addAll(list.sublist(0, i)); } 如果您想要 shift 而不是 rotate,您可以简单地使用 removeAt 功能: List<int> list = [ 1, 2, 3 ]; int firstElement = list.removeAt(0); print(list); // [ 2, 3 ] print(firstElement); // 1 来自文档: 从此列表中删除位置 [index] 处的对象。 此方法将 this 的长度减少 1,并将后面的所有对象向下移动一个位置。 返回删除的值。 [索引]必须在 0 ≤ 索引范围内 < length. The list must be growable. 这里有一些更有用的 JS shim。 您还可以创建一个扩展以在任何地方使用它,并且具有空安全性。 extension RotateList<T> on List<T>{ List<T> rotate(int rotate){ if(isEmpty) return this; var index = rotate % length; return sublist(index)..addAll(sublist(0, index)); } }
这是我的 ant-list-header elemet css 这是我的 ant-list-header elemet css <div class="ant-list-header" style=" position: sticky; top: 0; z-index: 100; height: 30px; "><div class="sc-eDZJSx kXYedM"><strong>Unmapped Rate Plans</strong><strong>See all</strong></div></div> 这是我的 ant-list-items 元素 <ul class="ant-list-items"></ul> 什么样的CSS会让我粘上ant-list-header 现在 尝试过的位置:粘性但没有工作 .ant-list-header { position: sticky; top: 0; z-index: 100; height: 30px; background-color: white; } <div class="ant-list-header"> <div><strong>Unmapped Rate Plans</strong><strong>See all</strong></div> </div> <ul class="ant-list-items"> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> <li>some text</li> </ul>
我能找到的在 Powershell 中获取 StdRegProv WMI 类实例的唯一方法是 $StdRegProv = Get-WmiObject -List -Namespace root\default -ComputerName "my_computer" -Credential $cred | $StdRegProv = Get-WmiObject -List -Namespace root\default -ComputerName "my_computer" -Credential $cred |什...
发生异常:TypeError 不支持操作数类型 -:'list' 和 'int'
描绘所发生事件的图像 发生异常:类型错误 - 不支持的操作数类型:“list”和“int” 文件“C:\用户
给定一个带有 List 字段的类: 公共类 A 实现可序列化 { 私人最终名单名称; 公共A(列表名称){ this.names = List.copyOf(名称...
我正在使用 Jasper-Reports 5.2.0,并且有一个包含 2 个子报告的主报告。 我有一个模型 ReportData,其中包含两个属性:List felder 和 List werte。双胞胎...
使用 Docker 容器中的“apt list --upgradable”访问可升级包
我正在尝试使用 apt list --upgradable 从 Docker 容器内访问主机系统上的可升级包列表,以将可升级包的数量导出为指标。 我已经...
Any() 当对象为 null 时抛出异常,如何返回 null?
我在 linq 中有以下查询, List solicitudesSeccionEliminar = solicitudBD.SolicitudSeccion?.Where(bd => !solicitudEdit.SolicitudSeccion.Any(ed => bd.
Polars DataFrame 数据透视表以 List[str] 作为数据类型
数据 = {“错误”:[[“x”,“z”],无,[“x”,“z”],无], “X”:[“x”,“p”,“x”,“p”], &qu...
如何反序列化包含 List<?, ?> 作为值的 Map<?>...例如地图<Long, List<Long>?
我正在尝试使用杰克逊反序列化Map。当我尝试调用反序列化方法时,出现编译时错误。我使用的映射器是 com.fasterxml.ja...
我了解 extends 和 super 在泛型中的工作原理。 根据理论,当方法类似于 m(List) 且 X 是一个接口时,则可以通过类型 X 的列表来调用此方法并且...
问题在于我有这篇文章: 公共异步任务 Post([FromBody]列表?请求) 但是当你在 Postman 中尝试使用没有 [] 的错误时......
如何合并不同列表中的数据名,包括基于名称的部分匹配,没有一对一的等效项
我有两个数据帧列表,需要根据两个列表中的匹配名称进行合并。 这是数据: 数据<- list(foo = structure(list(bodyPart = c("leg", "arm&q...
我有这个空数据框 新_df<-structure(list(id = c("R_88j7lG37gLfxk22", "R_88j7lG37gLfxk22", "R_88j7lG37gLfxk22", "R_88j7lG37gLfxk22", "
我在Java中有以下方法: 公共列表getList(字符串str,类clazz){ List lst = new ArrayList<>(); String[] arr = str.split(",&quo...
df 是这样的: df <- data.frame( groups=I(list(c("a"), c("b","c", "d", "e","f"), c("g","h"), c("i&quo...
我正在尝试覆盖 Junit 用于弹性搜索 ParsedFilter。 代码: 私有无效 returnDeviceColumnValues(List uniqueColumnValues, NativeSearchQuery searchQuery) { 搜索点击量<
我有以下数据 数据<-structure(list(id = "R_88j7lG37gLfxk22", t1_choice = "2", t2_choice = "1", t3_choice = "1", t4_choice = "2"), row.
我有一个包含国家/地区名称的 List 对象。我如何按字母顺序排序此列表?
我有多个共享公共列的数据框。 dfs <- list(DB07, DB08, DB09, DB10, DB11, DB12, DB13, DB14, DB15, DB16, DB17, DB18, DB19, DB20, DB21) I would like to check if any combinat...
我有一个列表,我想删除具有奇数长度的元素: 我的列表<- list() my_list$a <- c(1,2,3,4) #length 4 my_list$b <- c(1,2,3) # length 3 my_list$c <- c(5,6,7,8,6,7) #
给出代码: test_dict = {'aaa': [1, 2], 'bbb': [4, 5], 'ccc': [7, 8]} 利斯 = [11, 22, 44, 55, 77, 88] 尝试迭代更新 test_dict 变为: test_dict = {'aaa' : [11, 22], 'bbb' : [44...
扫描一行数据,并根据该行的值创建一个新的长数据集,其中有一列包含二进制值
这是我的初始数据 长5<-structure(list(id = c("R_88j7lG37gLfxk22", "R_6DK8lERVf8lSQf4", "R_eG8g4wMm8JsqNlI", "R_9TCgsW0sLA4xHOm", "
我有这个代码: test_dict = {'aaa': [1, 2], 'bbb': [4, 5], 'ccc': [7, 8]} 利斯 = [11, 22, 44, 55, 77, 88] 我正在尝试迭代更新 test_dict 变为: test_dict = {'aaa' : [11, 22], ...
考虑以下 HTML 和 CSS,如果任何子项(内容)的宽度大于 50%,我想将 .responsive-list 的宽度增加到 100%。是否可以实现...
帮助解决Row组件重新渲染的问题。 我有一个父 List 组件,里面有一个 Row 组件列表。 Row里面有一个渲染计数器,renders。 我需要那个...
Keras model.load_weights()错误:ValueError:无效的高库版本绑定(无效的高库版本绑定)
我使用 Gadgetron 的 Docker 来通过 Keras 实现一个 Gadget。 Theano 作为后端。这是 Dockerfile,pip list 的结果是 套餐版本 --------------------------------
通过从现有列中提取字符串并将行值转换为新列,将数据从宽格式重新调整为长格式
我有这个数据: 长1<-structure(list(id = "R_88j7lG37gLfxk22", t1_choice = "2", t2_choice = "1", t3_choice = "1", t4_choice = "2",
有谁知道是否有一个系统可以滚动到 SwiftUI 表中的一行? 我知道我可以使用 List/ScrollView/ScrollViewReader 组合,但我理想地寻找与 Ta 配合使用的东西...
我有一个与此类似的数据集: 数据集<- structure( list( Participant.Id = 1:5, x1 = c(10L, 20L, 30L, 40L, 50L), x2 = c(15L, 25L, 35L, 45L, 55L), x3 = c(20L, 25L, NA, 45L, NA), x4 = c(25L...
collections.deque()是Python中常长列表的最佳实现吗?
我想在python中限制列表的长度,当len(list) > limit时,第一个项目将被删除,collections.deque()可以实现,但是,它会比以下慢: 列表_A = [2,4,6,8,11]
比较List的相同结果<Map<String, Object>>不成立
我正在尝试比较由 Map 组成的列表中的值,但结果总是返回 false,尽管我与之比较的值是相同的。我做了什么吗
如何使用 ag 又名 the_silver_search 仅搜索目录?
我喜欢只搜索目录,选项 ag --list-file-types 对此没有帮助。坚持使用 ag 的原因是可以选择带有 --path-to-ignore 的文件,其中包含 pat...
正在开发 Windows 的 Caffinate 替代品,想知道是否有一种方法可以只获取当前使用的电源计划的 GUID,而不需要其余的输出,这是我的示例...
如何检索 Azure 资源组模板中 Application Insights 实例的检测密钥?
有没有办法在 Azure 资源组模板中检索 Application Insights 实例的 Instrumentation Key ? 我已尝试此处的说明来检索 list* opera 的列表...
我一直在使用下面的CMD从打开纯文本端口的Kafka队列中获取最新的偏移量 kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 服务器:9092 --topic
有没有办法在Python中强制执行组合类型提示?我希望得到以下行为: 导入类型_强制 @type_enforced.Enforcer def my_fn(a: list[int]) -> 无: 经过 我的_...
我有以下方法来创建这个 ExpandoObject: List 示例 = new List(); foreach(费率中的变量率) { varrateObject = new ExpandoObject() as IDictionar... 我有以下方法来创建这个ExpandoObject: List<object> example = new List<object>(); foreach (var rate in rates) { var rateObject = new ExpandoObject() as IDictionary<string, object>; rateObject["Id"] = rate.Id; rateObject["RateType"] = rate.RateType; rateObject["Units"] = rate.R6Item.Unit.Symbol; rateObject["Schedule"] = rate.R6Item.Schedule.Description; rateObject["R6Code"] = rate.R6Item.Code; rateObject["R6Description"] = rate.R6Item.Description; rateObject["R7Code"] = rate.R7Item.Code; rateObject["R7Description"] = rate.R7Item.Description; rateObject["DICODE"] = rate.R6Item.Schedule.Discipline.Code; foreach (var currency in rate.Project.ProjectCurrencies) { rateObject[currency.Currency.Name] = currency.Currency.Name; } example.Add(rateObject); } 现在,当我展开示例对象时,它看起来像这样: 如果我进一步扩展,就像这样: 现在我想要的数据是如何在动态视图中显示的,有没有办法能够访问它?并有与 ExpandoObject 的动态视图相同的示例? 您肯定可以做很多事情来增强您的调试体验。这是我的快速尝试: 我必须使用组合来扩展密封类ExpandoObject,其属性为: class MyExpando { [DebuggerBrowsable(DebuggerBrowsableState.Never)] public ExpandoObject Value { get; } = new(); [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] public List<KeyValuePair<string, object?>> Properties => Value.ToList(); public void Add(string key, object value) => ((IDictionary<string, object?>)Value)[key] = value; public override string ToString() => string.Join(", ", Value.Select(o => $"{o.Key}={o.Value}")); } 有: 覆盖显示集合时使用的ToString()方法, 隐藏在调试器属性 Value 中以访问 ExpandoObject, 属性 Properties 用于在调试器 KeyValuePair 条目中可视化。
在 Scala 2.12.10 和 Java 1.8 IDEA 中使用时,如何解决“Illegal circularinheritance涉及trait Iterable”编译错误?
看起来Scala编译器有冲突。该错误发生在 Scala 2.12.10、Spark 2.4.4 和 Java 1.8 IDEA 中的 val list1 = sc.makeRDD(List(1,2,3,4)) 中。 导入 org.apache.spark.{SparkC...
我有以下方法来创建这个expandoObject: List 示例 = new List(); foreach(费率中的变量率) { var 速率对象 = 新 我有以下方法来创建这个expandoObject: List<object> example = new List<object>(); foreach (var rate in rates) { var rateObject = new ExpandoObject() as IDictionary<string, object>; rateObject["Id"] = rate.Id; rateObject["RateType"] = rate.RateType; rateObject["Units"] = rate.R6Item.Unit.Symbol; rateObject["Schedule"] = rate.R6Item.Schedule.Description; rateObject["R6Code"] = rate.R6Item.Code; rateObject["R6Description"] = rate.R6Item.Description; rateObject["R7Code"] = rate.R7Item.Code; rateObject["R7Description"] = rate.R7Item.Description; rateObject["DICODE"] = rate.R6Item.Schedule.Discipline.Code; foreach (var currency in rate.Project.ProjectCurrencies) { rateObject[currency.Currency.Name] = currency.Currency.Name; } example.Add(rateObject); } 现在,当我展开示例对象时,它看起来像这样: 如果我进一步扩展,就像这样: 现在我想要的数据是如何在动态视图中显示的,有没有办法能够访问它?并有与 ExpandoObject 的动态视图相同的示例吗? 您肯定可以做很多事情来增强您的调试体验。这是我的快速尝试: 我必须使用组合来扩展密封类ExpandoObject,其属性为: class MyExpando { [DebuggerBrowsable(DebuggerBrowsableState.Never)] public ExpandoObject Value { get; } = new(); [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] public List<KeyValuePair<string, object?>> Properties => Value.ToList(); public void Add(string key, object value) => ((IDictionary<string, object?>)Value)[key] = value; public override string ToString() => string.Join(", ", Value.Select(o => $"{o.Key}={o.Value}")); } 有: 覆盖显示集合时使用的ToString()方法, 隐藏在调试器属性 Value 中以访问 ExpandoObject, 属性 Properties 用于在调试器 KeyValuePair 条目中可视化和编辑。
有没有办法设置ObjectMapper的默认行为来从JSON数组创建Java Set而不是List 更新 让我添加一些有关我的问题的详细信息 我的数据是递归结构,...
我收到一个 TypeError: 'list' 对象在我正在构建的脚本中不可调用。 类型错误 鉴于这是对 url 的 get 请求,打印结果的正确语法是什么......
在此输入图像描述 我使用 if else 语句检查“for i in list”的值。它在每个索引元素上单独运行程序,直到“中断”。为什么 else 运行时 if ha...
我有一个对象列表,例如 Person 依次有几个列表,其中很少有通用属性,如下所示 列表 地址1 = List.of("1","2","5","6& 我有一个对象列表,例如 Person 依次有几个列表,其中很少有通用属性,如下所示 List<Address> address1 = List.of("1","2","5","6") List<Address> address2 = List.of("3","4") List<Email> email1 = List.of("[email protected]","[email protected]", "[email protected]") List<Email> email2 = List.of("[email protected]", "[email protected]") Person person1 = new Person("smith",22, address1, email1) Person person2 = new Person("Alex",30, address2, email2) List<Person> person = List.of(person1, person2) 我想迭代人员列表并获取地址和电子邮件对象的其他两个嵌套列表大小的大小。在上面的例子中,地址大小=6,电子邮件=5,我想返回 是否有可能在单次迭代中在Java流中实现这一点? 是否可以在单次迭代中在 Java 流中实现此目的? 如果您指的是一个循环或类似的构造,是的。如果你的意思是一些 O(1) 解决方案,不!无论是命令式还是声明式完成,都会在某个地方出现迭代。最简单的方法如下: int emailCount = 0; int addressCount = 0; for (Person person : persons) { emailCount += person.email.size(); addressCount += person.address.size(); } System.out.println(emailCount); System.out.println(addressCount); 打印 5 6 这也可以通过流来完成,但开销更大。
我正在尝试获取某些数据库值并将它们存储在数据表中。之后,我应用 linq 对所有带有帐号的数据进行分组。 我收到以下错误 无法暗示...
我遇到了这个语法 列表[]结果=新列表[4]; 我知道 java 中的列表是什么,也是通用的,但是在这种情况下数组括号的目的是什么。这是否意味着它是...
假设我们有一款游戏,其中的角色具有特殊能力。所有能力共享一个名为 AbstractAbility 的抽象基类型。每个字符都有一个所述基本类型的列表(List),
有一个带列的数据框,我只想对数字进行降序排序,并保持文件格式具有相同的列名和行名的数据框。 df <- structure(list(PC1 = c(0.799780548221...