我正在两个不同的JSP文件上调用函数mvcUrl()
。在第一个文件中,它返回预期的结果,但是在第二个文件中,它返回包含该JSP路径的URL。
我在Apache Tomcat 9上使用Spring MVC 4.1.0,Spring Security 4.0.0。
我一直在寻找有这个问题的人几个小时,但找不到类似的东西。我已经尝试了不同的Spring Security Rules,更改了控制器上的动作名称,为方法指定了明确的名称,但是没有任何效果。
我的Spring Security配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/usuarios/**").hasRole(TipoUsuario.ADMIN.toString())
.antMatchers("/contas/").hasRole(TipoUsuario.ADMIN.toString())
.antMatchers("/contas/form").hasRole(TipoUsuario.ADMIN.toString())
.antMatchers("/contas/cadastro").hasRole(TipoUsuario.ADMIN.toString())
.antMatchers("/contas/fechar").hasRole(TipoUsuario.ADMIN.toString())
.antMatchers("/contas/fechar/confirmar").hasRole(TipoUsuario.ADMIN.toString())
.antMatchers("/relatorios/cliente").hasRole(TipoUsuario.ADMIN.toString())
.antMatchers("/movimentacoes/**").authenticated()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and().formLogin().loginPage("/login").permitAll().defaultSuccessUrl("/", false)
.and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.and().exceptionHandling().accessDeniedPage("/acessoNegado");
}
我正在调用的方法:
@Controller
@RequestMapping("/movimentacao")
public class MovimentacaoController {
@RequestMapping(value="/cadastrar", method=RequestMethod.POST)
public ModelAndView cadastrarMovimentacao(CadastroMovimentacaoWrapper wrapper,
RedirectAttributes redirectAttributes, @AuthenticationPrincipal Usuario usuarioLogado) {
[...]
}
}
可以正常工作的一个
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<h1>${s:mvcUrl('MC#cadastrarMovimentacao').build() }</h1>
不是的:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<h1>${s:mvcUrl('MC#cadastrarMovimentacao').build() }</h1>
我期望mvcUrl
函数返回类似localhost:8080/movimentacao/cadastrar
的东西(这正是我在第一个JSP中得到的东西),但是,我却得到类似localhost:8080/WEB-INF/views/colaborador/conta.jsp/movimentacao/cadastrar
的东西。 (在第二个JSP上)
观察:'WEB-INF / views / colaborador / conta.jsp'是呈现此无效代码的视图的路径。
答案 0 :(得分:0)
彻底分析代码后,我发现此行为的发生是由于JSP控制器中的ModelAndView对象正在通过mvcUrl
调用呈现页面。
在工作案例中,我返回了ModelAndView对象的以下实例:modelAndView = new ModelAndView("admin/detalhe/conta");
在另一种情况下,该实例为modelAndView = new ModelAndView("/colaborador/conta");
我在开头删除了多余的斜杠,并且错误不再存在。
现在,我想知道为什么它可以正确找到文件但是会干扰其他方法。