почему функция s: mvcUrl возвращает разные результаты в разных представлениях? - PullRequest
0 голосов
/ 23 мая 2019

Я вызываю функцию mvcUrl() для двух разных файлов JSP.В первом файле он возвращает ожидаемый результат, но во втором он возвращает URL с путем этого JSP в середине.

Я использую Spring MVC 4.1.0, Spring Security 4.0.0 на Apache Tomcat 9.

Я искал кого-то, у кого была эта проблема в течение нескольких часов, но я не могу найти ничего подобного.Я уже пробовал разные Spring Security Rules, меняя имя действия на контроллере, давая явное имя для метода, но ничего не работает.

Конфигурация My 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» - это путь к представлению, которое отображает этот код, который не являетсярабочий.

1 Ответ

0 голосов
/ 23 мая 2019

После тщательного анализа кода я обнаружил, что такое поведение происходит из-за объекта ModelAndView в контроллере JSP, который отображает страницу с помощью вызова mvcUrl.

В рабочем случае я возвращал этот экземпляр объекта ModelAndView: modelAndView = new ModelAndView("admin/detalhe/conta"); В другом случае экземпляр был modelAndView = new ModelAndView("/colaborador/conta");

Я удалил лишнюю косую черту в начале, и ошибка прекратилась.

Теперь мне интересно, почему он находит файл правильно, но мешает другому методу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...