передать параметр из JSP в контроллер Springboot - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь передать значение пароля контроллеру пружинной загрузки, не получая никакого ответа на этот вопрос. Может, кто-нибудь посоветует это?boot

<form method="POST" th:action="@{/esparkUserPage}">
                        <div class="control-group">
                 <input id="password" type="password" name="password" class="form-control input-sm" required="User Pwd is Required" placeholder="password"  />
                <label class="login-field-icon fui-lock" for="login-pass"></label>
                </div>
                <input class="btn btn-primary btn-large btn-block" type="submit" value="Submit" id="submit" name="submit" />
                <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
                </form>

MVcConfig:

    @Configuration
public class WbMvcConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("esparkLoginPage");
        registry.addViewController("/esparkHome").setViewName("esparkHome");
        registry.addViewController("/esparkUserPage").setViewName("esparkUserPage");
        registry.addViewController("/esparkLoginPage").setViewName("esparkLoginPage");

    }

            }

Securityconfig:

 @Override
protected void configure(HttpSecurity httpSecurity) throws Exception {

    httpSecurity
            .authorizeRequests()
            //.antMatchers("/", "/esparkLoginPage","/passReset").permitAll()
            .anyRequest()
            .permitAll() //.authenticated()
            .and()
            .formLogin()
            .loginPage("/esparkLoginPage")
            .defaultSuccessUrl("/esparkUserPage")
            .permitAll()
            .and()
            .csrf().disable()
            .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .logoutSuccessUrl("/esparkLoginPage")
            .permitAll();

}

resetcontrlloer

    @Controller
public class ResetController {
    @ResponseBody
    @RequestMapping(value = "/esparkUserPage", method = RequestMethod.POST)
    public String esparkUserPage(HttpServletRequest httpRequest,HttpServletResponse response ) {


        String username = httpRequest.getParameter("username");
        String password = httpRequest.getParameter("password");
        System.out.println(username);
         List<String> result = new ArrayList<String>();
        /*     try
             {

                 JSch jsch = new JSch();


                 System.out.println("Inside shell");
                 Session session = jsch.getSession(USERNAME, host, port);
                 session.setConfig("StrictHostKeyChecking", "no");
                 session.setPassword(PASSWORD);
                 session.connect();

                 //create the excution channel over the session
                 ChannelExec channelExec = (ChannelExec)session.openChannel("exec");

                 System.out.println(channelExec.toString());
                 // Gets an InputStream for this channel. All data arriving in as messages from the remote side can be read from this stream.
                 InputStream in = channelExec.getInputStream();
                 String com="sh set_passwd"+" "+username+" "+"'"+password+"'" ;
                 channelExec.setCommand(com);
                 channelExec.connect();
                 BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                 String line;
                 while ((line = reader.readLine()) != null)
                 {
                     result.add(line);
                 }
                 int exitStatus = channelExec.getExitStatus();
                 channelExec.disconnect();
                 session.disconnect();

                 if(exitStatus < 0){
                 }
                 else if(exitStatus > 0){
                 }
                 else{
                 }

             }
             catch(Exception e)
             {
                 System.err.println("Error: " + e);
             }*/
             return "Password Reset Done!";
         }


}

Также, пожалуйста, совет, как лучше выполнитькоманда оболочки из Spring-Boot?Использование весенней загрузки впервые FYI.

1 Ответ

0 голосов
/ 29 октября 2018

Итак, у вас есть несколько вариантов:

1 - Если вам просто нужно передать пароль как String, вы можете использовать в вашем контроллере аннотацию @RequestParam для отправки по вашему запросу, поэтому ваш контроллер должен выглядеть следующим образом:

   @Controller
   public class ResetController {

      @ResponseBody
      @RequestMapping(value = "/esparkUserPage", method = RequestMethod.POST)
      public String esparkUserPage(@RequestParam("password")String password, HttpServletRequest httpRequest,HttpServletResponse 
      response ) {
           // your code
      }

2 - Если вы хотите отправить объект для контроллера, один из способов можно сделать так: Создайте ресурс для открытия вашего шаблона, что означает, просто ваша страница входа и добавление ссылочного объекта, например:

//supose your login.html
    @RequestMapping("/login")
    public String loginPage(Model model) {
        model.addAttribute("user", new User());
        return "login";
    }

Затем убедитесь, что ваш шаблон правильно связывает ваш объект, например:

       <form method="POST" th:action="@{/esparkUserPage}" th:object="${user}">
                    <div class="control-group">
             <input id="password" type="password" name="password" class="form-control input-sm" required="User Pwd is Required" placeholder="password" th:field="*{password}" />
            <label class="login-field-icon fui-lock" for="login-pass"></label>
            </div>
            <input class="btn btn-primary btn-large btn-block" type="submit" value="Submit" id="submit" name="submit" />
            <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
       </form>

Вот модель вашего пользовательского класса:

import java.io.Serializable;

public class User implements Serializable {
   private static final long serialVersionUID = 1L;
   private String username;
   private String password;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

}

Теперь добавьте на свой контроллер аннотацию, как привязать ваш объект на стороне сервера:

  @ResponseBody
  @RequestMapping(value = "/esparkUserPage", method = RequestMethod.POST)
  public String esparkUserPage(@ModelAttribute(name="user") User user, HttpServletRequest httpRequest,HttpServletResponse 
  response ) {
       // your code
  }

Я думаю, это поможет вам отправить параметры по вашим запросам.

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