Проблемы SpringBoot с SessionScope - PullRequest
0 голосов
/ 18 апреля 2020

Я запускаю приложение SpringBoot с MyBatis.

И у меня есть маппер MyBatis, подобный этому:

    @Component
    @Mapper
    public interface AccountMapper {
        @Insert("insert into dc_account(identification,nickname,username,password) values (#{identification},#{nickname},#{username},#{password})")
        public int insert(Account account);
        @Update("update dc_account set identification=#{identification},nickname=#{nickname},username=#{username},password=#{password}")
        public int update(Account account);

        @Select("select * from dc_account where username=#{username} and password=#{password}")
        @Results(
            id = "account",
            value = {
                @Result(property = "identification", column = "identification"),
                @Result(property = "nickname", column = "nickname"),
                @Result(property = "username", column = "username"),
                @Result(property = "password", column = "password")   
            }
        )
        Account select(Account account);
    }

Класс учетной записи:

@Component
@SessionScope(proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Account{
    @Value("1")
    int identification;
    @Value("1")
    String nickname;
    @Value("1")
    String username;
    @Value("1")
    String password;
//getter and setter
}

Контроллер:

@Autowired
AccountMapper accountMapper;
@Autowired
Account account;
//.......
@RequestMapping("/login")
    Account login(
        @RequestParam("username")String username,
        @RequestParam("password")String password){
            account.setUsername(username);
            account.setPassword(password);
            accountMapper.select(account);
            return account;
    }

И когда я ввожу URL localhost:8080/login?username=1&password=1

Он сообщает enter image description here

и если я удаляю аннотацию @SessionScope class Account все работает отлично.

Я не знаю, что пошло не так ... кто-нибудь может дать какой-нибудь совет?

1 Ответ

0 голосов
/ 18 апреля 2020

После целого дня поиска.

Вот что я думаю:

Когда я заменяю контроллер на этот код ниже, все по-прежнему работает нормально.

Так что с mybatis все в порядке

@RequestMapping("/login")
    Account login(
        @RequestParam("username")String username,
        @RequestParam("password")String password){
            account.setUsername(username);
            account.setPassword(password);
            return accountMapper.select(account);
            //return account;
    }

Но если я немного изменим код на


@RequestMapping("/login")
    Account login(
        @RequestParam("username")String username,
        @RequestParam("password")String password){
            account.setUsername(username);
            account.setPassword(password);
            //return accountMapper.select(account);
            return account;
    }

Затем он сообщит то же сообщение об ошибке, которое я упомянул в вопросе .

Я думаю, что bean-компонент @SessionScope (который является классом Account) уже управляется контейнером io c SpringBoot,

, и если я возвращаю тот же bean-компонент области действия сеанса из этого Контролирующий метод,

, эти два компонента указывают на одно и то же, что вызывает некую самоссылку.

...