AJAX получить возврат 404 весной - PullRequest
1 голос
/ 09 марта 2020

помогите мне index. jsp

$("#btn-submit").click(function () {
    var username=document.getElementById("username");
    var password=document.getElementById("password");
    $.ajax({
        url:"login",
        contentType: 'application/json;charset=utf-8',
        dataType: 'text',
        headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
        data: {
            username:username.value,
            password:password.value
        },
        type: 'get',
        success: function (response) {
            if (response=="1") {
                alert(response);
            }
            else alert(response);
        },
        error: function (x, e) {
            console.log(e)
        }
    });
});

LoginController. java

@RequestMapping("/login")
@Controller
public class LoginController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = { "/login" }, method = RequestMethod.GET)
    @ResponseBody
    public int checkValid(@RequestParam("username") String username,@RequestParam("password") String password, HttpServletRequest request, HttpServletResponse response, Locale locale, Model model){
        try {
            if (userService.findByUserName(username).equals(hashPass(password))){
                return 1;
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return 0;
        }
        return 0;
    }
    public String hashPass(String pass) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] hashInBytes = md.digest(pass.getBytes(StandardCharsets.UTF_8));

        // bytes to hex
        StringBuilder sb = new StringBuilder();
        for (byte b : hashInBytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}

spring- config-servlet. xml

<?xml version="1.0" encoding="UTF-8"?>

http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd "> / WEB-INF / pages /. jsp /resources/jdbc.properties

<!-- Enable Annotation based Declarative Transaction Management -->
<tx:annotation-driven proxy-target-class="true"
                      transaction-manager="transactionManager" />

<!-- Creating TransactionManager Bean, since JDBC we are creating of type
  DataSourceTransactionManager -->
<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>
<bean id="postsDAO" class="com.blog.dao.impl.PostsDAO">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="postsService" class="com.blog.service.impl.PostsService">
    <property name="postsDAO" ref="postsDAO"/>
</bean>
<bean id="userDAO" class="com.blog.dao.impl.UserDAO">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="userService" class="com.blog.service.impl.UserService">
    <property name="userDAO" ref="userDAO"/>
</bean>

Я использую tomcat 9 Ошибка: не удалось загрузить ресурс: сервер ответил http://localhost: 8080 / Blog_war_exploded / login? Имя пользователя = root & пароль = root со статусом 404 ()

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

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

первый вход в систему на уровне контроллера, означает, что если вы хотите получить доступ к каким-либо службам в этом контроллере, ваши запросы имеют начинать с "/ login"

@RequestMapping("/login")
@Controller
public class LoginController {

и второго входа в систему на уровне метода означает, что вы хотите вызвать / login службу в /login.

 @RequestMapping(value = { "/login" }, method = RequestMethod.GET)
 @ResponseBody
 public int checkValid(@RequestParam("username") String username,@RequestParam("password") String password, HttpServletRequest request, HttpServletResponse response, Locale locale, Model model){

Итак, действительный URL для вызова службы / login в / контроллер входа:: / login / login

, и из-за этого ваш URL / логин не был найден

, вы можете удалить первый / login в уровень контроллера, или используйте / login / login из вашего ajax запроса ...

0 голосов
/ 09 марта 2020

Посмотрите на свою ошибку: вы получаете доступ к http://localhost:8080/Blog_war_exploded/login, но вы действительно хотите получить доступ к http://localhost:8080/login.

. Причина в том, что вы указали свой URL-адрес как login вместо /login, поэтому относится к текущему «каталогу», а не к root.

Изменение кода для использования /login должно исправить это:

    $.ajax({
        url: "/login",
        ...
    })

На примечании стороны Это не очень хорошая идея для этого с помощью запросов GET - среди прочего, пароль будет храниться в журнале сервера в виде открытого текста. Вместо этого следует использовать запрос POST.


Обновление:

Кроме того, похоже, вы используете два отображения запроса для /login друг на друга, так что в итоге вы получите /login/login. Проверьте как правильно использовать @RequestMapping .

Попробуйте изменить второй (уровень метода) на @RequestMapping(value = { "/" }, method = RequestMethod.GET) или просто @RequestMapping("/").

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