Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 弹簧靴,Can';无法到达其他控制器类_Spring Boot_Spring Mvc_Spring Security_Thymeleaf - Fatal编程技术网

Spring boot 弹簧靴,Can';无法到达其他控制器类

Spring boot 弹簧靴,Can';无法到达其他控制器类,spring-boot,spring-mvc,spring-security,thymeleaf,Spring Boot,Spring Mvc,Spring Security,Thymeleaf,始终向同一控制器中的方法(/login)发出请求。 当您在Register.html中按Save按钮时,UserController.java类中的/login方法会自动工作,尽管它必须在RegisterController.java类中运行saveRegisterPage方法(/registration/saveRegister)。 要运行saveRegisterPage方法,必须执行哪些操作 多谢各位 UserController.java @Controller publi

始终向同一控制器中的方法(/login)发出请求。 当您在Register.html中按Save按钮时,UserController.java类中的/login方法会自动工作,尽管它必须在RegisterController.java类中运行saveRegisterPage方法(/registration/saveRegister)。 要运行saveRegisterPage方法,必须执行哪些操作

多谢各位

UserController.java

    @Controller
    public class UserController {
    
        @RequestMapping(value = "/register", method = RequestMethod.GET)
        public String registerPage(Model model) {
            model.addAttribute("user", new User());
            return "register";
        }
        @RequestMapping("/")
        public String index() {
            return "login";
        }
    
        @RequestMapping("/login")
        public String login() {
            return "login";
        }
        
        @RequestMapping("/home")
        public String home() {
            return "home";
        }
    }

    @Controller
    @RequestMapping(value="/registration")
    public class RegisterController {
    
        @Autowired
        UserServiceImpl userServiceImpl;
    
        @RequestMapping(value = "/saveRegister", method = RequestMethod.POST)
        public String saveRegisterPage(@ModelAttribute("user") User user, BindingResult result, Model model, RedirectAttributes attributes) {
            model.addAttribute("user", user);
            if (result.hasErrors()) {
                return "register";
            } else {
                userServiceImpl.save(user);
            }
            return "home";
        }
    }


    @EnableWebSecurity
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
    
        @Autowired
        private UserAuthService userAuthService;
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable();
            http
                    .authorizeRequests()
                    .antMatchers("/",  "/register", "/webjars/**", "/h2-console/**","/webjars/").permitAll()
                    .anyRequest().authenticated()
                    .and()
                    .formLogin().loginPage("/login").defaultSuccessUrl("/home", true).permitAll()
                    .and()
                    .logout()
                    .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                    .logoutSuccessUrl("/home").permitAll()
                    .and()
                    .httpBasic();
            
            http.headers().frameOptions().disable();
    
        }
        
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(userAuthService).passwordEncoder(encoder());
        }
        @Bean
        public PasswordEncoder encoder() {
            return new BCryptPasswordEncoder();
        }
    }
RegisterController.java

    @Controller
    public class UserController {
    
        @RequestMapping(value = "/register", method = RequestMethod.GET)
        public String registerPage(Model model) {
            model.addAttribute("user", new User());
            return "register";
        }
        @RequestMapping("/")
        public String index() {
            return "login";
        }
    
        @RequestMapping("/login")
        public String login() {
            return "login";
        }
        
        @RequestMapping("/home")
        public String home() {
            return "home";
        }
    }

    @Controller
    @RequestMapping(value="/registration")
    public class RegisterController {
    
        @Autowired
        UserServiceImpl userServiceImpl;
    
        @RequestMapping(value = "/saveRegister", method = RequestMethod.POST)
        public String saveRegisterPage(@ModelAttribute("user") User user, BindingResult result, Model model, RedirectAttributes attributes) {
            model.addAttribute("user", user);
            if (result.hasErrors()) {
                return "register";
            } else {
                userServiceImpl.save(user);
            }
            return "home";
        }
    }


    @EnableWebSecurity
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
    
        @Autowired
        private UserAuthService userAuthService;
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable();
            http
                    .authorizeRequests()
                    .antMatchers("/",  "/register", "/webjars/**", "/h2-console/**","/webjars/").permitAll()
                    .anyRequest().authenticated()
                    .and()
                    .formLogin().loginPage("/login").defaultSuccessUrl("/home", true).permitAll()
                    .and()
                    .logout()
                    .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                    .logoutSuccessUrl("/home").permitAll()
                    .and()
                    .httpBasic();
            
            http.headers().frameOptions().disable();
    
        }
        
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(userAuthService).passwordEncoder(encoder());
        }
        @Bean
        public PasswordEncoder encoder() {
            return new BCryptPasswordEncoder();
        }
    }
home.html


    <html>
    <head>...</head>
    <body>
    
    <div class="container">
        <h2>Welcome</h2>
        <a href="/logout" class="btn btn-danger">Logout</a>
    </div>
    </body>
    </html>

    <html xmlns:th="http://www.w3.org/1999/xhtml">
    <head>...</head>
    <body>
    
    <div class="container">
        <div class="alert alert-danger" role="alert" th:if="${param.error}">
            Wrong Username or Passrod
        </div>
        <form th:action="@{/login}" method="post">
            <h1 class="h3 mb-3 font-weight-normal">Signin</h1>
    
            <label>Username</label>
            <input type="text" name="username" class="form-control"/>
            <label>Password</label>
            <input type="password" id="password" name="password" class="form-control"/>
            <br/>
            <button class="btn btn-lg btn-primary btn-block" type="submit">SignIn</button>
            <br/>
            <div class="margin-top20 text-center"><a th:href="@{/register}">Go Register</a>
            </div>
        </form>
    </div>
    </body>
    </html>

    <html xmlns:th="http://www.w3.org/1999/xhtml">
    <head>....</head>
    <body>
    <div class="container">
        <form autocomplete="off" th:action="@{/registration/saveRegister}" th:object="${user}" method="post">
            <label>Name </label>
            <input type="text" id="firstName" placeholder="First Name" th:field="*{firstName}" 
    class="form-control"/><br/>
            <label>Last name </label>
            <input type="text" id="lastName" placeholder="First Name" th:field="*{lastName}" class="form-control"/><br/>
            <label>Email </label>
            <input type="text" id="email" placeholder="First Name" th:field="*{email}" class="form-control"/><br/>
            <label>Username</label>
            <input type="text" id="username" placeholder=" Username" th:field="*{username}" class="form-control"/><br/>
            <label>Password</label>
            <input type="text" id="password" placeholder=" Password" th:field="*{password}" class="form-control"/><br/>
            <button type="submit" class="btn btn-success text-center form-control">Save</button>
        </form>
    </div>
    </body>
    </html>


    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.4.5</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.zorogluresul.springexample1</groupId>
        <artifactId>springexample1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>springexample1</name>
        <description>Spring Boot, Web, Thymeleaf, Jpa, Postgresql, Security</description>
        <properties>
            <java.version>11</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.thymeleaf.extras</groupId>
                <artifactId>thymeleaf-extras-springsecurity5</artifactId>
            </dependency>
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.webjars</groupId>
                <artifactId>bootstrap</artifactId>
                <version>3.3.7-1</version>
            </dependency>
            <dependency>
                <groupId>org.webjars</groupId>
                <artifactId>jquery</artifactId>
                <version>3.3.1-1</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>

pom.xml


    <html>
    <head>...</head>
    <body>
    
    <div class="container">
        <h2>Welcome</h2>
        <a href="/logout" class="btn btn-danger">Logout</a>
    </div>
    </body>
    </html>

    <html xmlns:th="http://www.w3.org/1999/xhtml">
    <head>...</head>
    <body>
    
    <div class="container">
        <div class="alert alert-danger" role="alert" th:if="${param.error}">
            Wrong Username or Passrod
        </div>
        <form th:action="@{/login}" method="post">
            <h1 class="h3 mb-3 font-weight-normal">Signin</h1>
    
            <label>Username</label>
            <input type="text" name="username" class="form-control"/>
            <label>Password</label>
            <input type="password" id="password" name="password" class="form-control"/>
            <br/>
            <button class="btn btn-lg btn-primary btn-block" type="submit">SignIn</button>
            <br/>
            <div class="margin-top20 text-center"><a th:href="@{/register}">Go Register</a>
            </div>
        </form>
    </div>
    </body>
    </html>

    <html xmlns:th="http://www.w3.org/1999/xhtml">
    <head>....</head>
    <body>
    <div class="container">
        <form autocomplete="off" th:action="@{/registration/saveRegister}" th:object="${user}" method="post">
            <label>Name </label>
            <input type="text" id="firstName" placeholder="First Name" th:field="*{firstName}" 
    class="form-control"/><br/>
            <label>Last name </label>
            <input type="text" id="lastName" placeholder="First Name" th:field="*{lastName}" class="form-control"/><br/>
            <label>Email </label>
            <input type="text" id="email" placeholder="First Name" th:field="*{email}" class="form-control"/><br/>
            <label>Username</label>
            <input type="text" id="username" placeholder=" Username" th:field="*{username}" class="form-control"/><br/>
            <label>Password</label>
            <input type="text" id="password" placeholder=" Password" th:field="*{password}" class="form-control"/><br/>
            <button type="submit" class="btn btn-success text-center form-control">Save</button>
        </form>
    </div>
    </body>
    </html>


    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.4.5</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.zorogluresul.springexample1</groupId>
        <artifactId>springexample1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>springexample1</name>
        <description>Spring Boot, Web, Thymeleaf, Jpa, Postgresql, Security</description>
        <properties>
            <java.version>11</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.thymeleaf.extras</groupId>
                <artifactId>thymeleaf-extras-springsecurity5</artifactId>
            </dependency>
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.webjars</groupId>
                <artifactId>bootstrap</artifactId>
                <version>3.3.7-1</version>
            </dependency>
            <dependency>
                <groupId>org.webjars</groupId>
                <artifactId>jquery</artifactId>
                <version>3.3.1-1</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>


4.0.0
org.springframework.boot
spring启动程序父级
2.4.5
com.zorogluresul.springexample1
例1
0.0.1-快照
例1
Spring Boot、Web、Thymeleaf、Jpa、Postgresql、安全
11
org.springframework.boot
spring引导启动器数据jpa
org.springframework.boot
弹簧启动安全
org.springframework.boot
弹簧启动装置
org.springframework.boot
SpringBootStarterWeb
org.thymeleaf.extras
thymeleaf-extras-springsecurity5
org.postgresql
postgresql
运行时
org.springframework.boot
弹簧起动试验
测试
org.springframework.security
弹簧安全性试验
测试
org.webjars
独自创立
3.3.7-1
org.webjars
jquery
3.3.1-1
org.springframework.boot
springbootmaven插件
试试这个结果

import java.io.IOException; 
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; 
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/")
public class UserController {

    @GetMapping("/register")
    public String registerPage(Model model) {
        model.addAttribute("user", new Fragment3());
        return "register";
    }
    @GetMapping //main page
    public String index() {
        return "login";
    }
    @GetMapping("/login") //logging out from home
    public String logout() {
        return "login";
    }
    
    @PostMapping("/home")
    public String home() {
        return "home";
    }
}
---------------------------------------------------------------------------


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; 
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/registration")
public class RegisterController {

    @Autowired
    UserServiceImpl userServiceImpl;

    @PostMapping("/saveRegister")
    public String saveRegisterPage(@ModelAttribute("user") User user, BindingResult result, Model model, RedirectAttributes attributes) {
        model.addAttribute("user", user);
        if (result.hasErrors()) {
            return "register";
        } else {
            userServiceImpl.save(user);
        }
        return "home";
    }
}`
大多数更改都是在后端进行的 尽管要注销,请替换home.html中的两行

<h2>Welcome</h2>
    <a  th:href="@{/login}" class="btn btn-danger">Logout</a>
欢迎您
试试这个结果

import java.io.IOException; 
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; 
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/")
public class UserController {

    @GetMapping("/register")
    public String registerPage(Model model) {
        model.addAttribute("user", new Fragment3());
        return "register";
    }
    @GetMapping //main page
    public String index() {
        return "login";
    }
    @GetMapping("/login") //logging out from home
    public String logout() {
        return "login";
    }
    
    @PostMapping("/home")
    public String home() {
        return "home";
    }
}
---------------------------------------------------------------------------


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; 
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/registration")
public class RegisterController {

    @Autowired
    UserServiceImpl userServiceImpl;

    @PostMapping("/saveRegister")
    public String saveRegisterPage(@ModelAttribute("user") User user, BindingResult result, Model model, RedirectAttributes attributes) {
        model.addAttribute("user", user);
        if (result.hasErrors()) {
            return "register";
        } else {
            userServiceImpl.save(user);
        }
        return "home";
    }
}`
大多数更改都是在后端进行的 尽管要注销,请替换home.html中的两行

<h2>Welcome</h2>
    <a  th:href="@{/login}" class="btn btn-danger">Logout</a>
欢迎您

您应该将RegisterController的requestMapping
/registration
添加到AntMatcher中,如下所示:

.antMatchers("/",  "/register", "/registration/*", "/webjars/**", "/h2-console/**","/webjars/").permitAll()

它在
/registration/*
末尾包含
/*
,以便允许RegisterController中的所有请求。如果您像
/registration/register
那样编写,它还会在RegisterController中运行saveRegisterPage方法。

您应该将RegisterController的请求映射
/registration
添加到AntMatcher中,如下所示:

.antMatchers("/",  "/register", "/registration/*", "/webjars/**", "/h2-console/**","/webjars/").permitAll()

它在
/registration/*
末尾包含
/*
,以便允许RegisterController中的所有请求。如果您像
/registration/register
那样编写它,它还会在RegisterController中运行saveRegisterPage方法。

我猜是因为您使用@{/login}进行了定义,因此它会自动调用登录api。那么你的建议是什么呢?试试这个/registration/saveRegister在registerPage.html@JohnI guess中已经有了/registration/saveRegister,因为你已经用@{/login}定义了,因此它会自动调用登录api。那么您的建议是什么呢?试试这个/registration/saveRegister在registerPage.html@johnw中已经有/registration/saveRegister了。您为什么在home.html中更改了@{/logout}?但是,当在Register.html中按save时,它不会转到RegisterController.java中的registration/save,而是转到UserController.html中的/login。为什么要在home.html中更改@{/logout}?但是,当在Register.html中按save时,它不会进入RegisterController.java中的registration/save,而是进入UserController.java中的/login。谢谢cafertayyar。问题已经解决。谢谢你,卡弗塔亚。问题已经解决了。