Endereço de front-end: https://github.com/wang926454/VueStudy/tree/master/VueStudy08-JWT
Se você tiver alguma dúvida, escaneie o código e entre no grupo QQ para se comunicar: 779168604
- Primeiro, poste o nome de usuário e a senha para usuário/login para fazer login. Se for bem-sucedido, o AccessToken criptografado será retornado. Se falhar, um erro 401 será retornado diretamente (a conta ou senha está incorreta).
- Basta trazer este AccessToken com você para visitas futuras.
- O processo de autenticação reescreve principalmente o filtro de entrada JWTFilter ( BasicHttpAuthenticationFilter ) de Shiro para determinar se o cabeçalho da solicitação contém o campo Autorização .
- Se sim, realize a autenticação e autorização de login do Token do Shiro (toda solicitação de acesso do usuário que necessite de permissão deve adicionar o campo Autorização no cabeçalho para armazenar o AccessToken ), caso contrário, utilize o acesso direto como visitante (se houver controle de permissão , o acesso do visitante será interceptado)
A maioria deles resolve esse problema na forma de MD5 + salt (detalhes do Baidu eu uso AES-128 + Base64 para criptografar a senha na forma de conta + senha). . O problema da senha secreta.
Originalmente, JedisUtil foi injetado diretamente como Bean . Cada vez que é usado, ele pode ser injetado diretamente
@Autowired
. No entanto, após reescrever o CustomCache de Shiro , JedisUtil não pôde ser injetado, então foi alterado para injeção estática no JedisPool. pool de conexão A classe de ferramenta JedisUtil@Autowired
chama diretamente o método estático.
- Após a autenticação de login ser aprovada, as informações do AccessToken são retornadas ( o carimbo de data e hora atual e o número da conta são salvos no AccessToken )
- Ao mesmo tempo, defina um RefreshToken no Redis com a conta como a chave e o valor como o carimbo de data/hora atual (hora de login)
- Agora, durante a autenticação, o AccessToken não deve ter expirado e o RefreshToken correspondente deve existir no Redis , e o carimbo de data/hora RefreshToken deve ser consistente com o carimbo de data/hora nas informações do AccessToken antes que a autenticação seja passada.
- Se você fizer login novamente e obter um novo AccessToken , o AccessToken antigo não poderá ser autenticado, porque as informações de carimbo de data / hora do RefreshToken armazenadas no Redis serão consistentes apenas com o carimbo de data / hora carregado nas informações de AccessToken geradas mais recentemente , portanto, cada usuário poderá usar apenas o AccessToken mais recente certificação
- O RefreshToken do Redis também pode ser usado para determinar se um usuário está online. Se um RefreshToken do Redis for excluído, o AccessToken correspondente a este RefreshToken não poderá mais passar na autenticação. Isso equivale a controlar o login do usuário e eliminá-lo. .
- O tempo de expiração do próprio AccessToken é de 5 minutos (configurável no arquivo de configuração) e o tempo de expiração do RefreshToken é de 30 minutos (configurável no arquivo de configuração)
- Após 5 minutos após o login, o AccessToken atual expirará. Se você trazer o AccessToken novamente para acessar o JWT, uma exceção TokenExpiredException será lançada, indicando que o Token expirou.
- Comece a determinar se o AccessToken deve ser atualizado . O Redis consulta se o RefreshToken do usuário atual existe e se o carimbo de data/hora transportado por este RefreshToken é consistente com o carimbo de data/hora transportado pelo AccessToken expirado.
- Se existir e for consistente, atualize o AccessToken, defina o tempo de expiração para 5 minutos (configurável no arquivo de configuração), o carimbo de data e hora para o carimbo de data e hora mais recente e também defina o carimbo de data e hora no RefreshToken para o carimbo de data e hora mais recente e atualize a expiração tempo para 30 novamente. Expiração em minutos (configurável no arquivo de configuração)
- Por fim, o AccessToken atualizado é armazenado no campo Autorização no cabeçalho da resposta e retornado (o front end o obtém e o substitui, e usa o novo AccessToken para acesso na próxima vez)
Primeiro configure o arquivo srcmainresourcesgeneratorgeneratorConfig.xml (a configuração padrão está no pacote reverso no nível inferior do pacote original) e execute-o na janela de linha de comando do diretório de nível pom.xml ( isto é, no diretório raiz do projeto) (A premissa é que o mvn esteja configurado) (IDEA pode ser executado diretamente clicando duas vezes na janela Maven Plugins)
mvn mybatis-generator:generate
先设置Content - Type为application / json
然后填写请求参数帐号密码信息
进行请求访问,请求访问成功
点击查看Header信息的Authorization属性即是Token字段
访问需要权限的请求将Token字段放在Header信息的Authorization属性访问即可
Token的自动刷新也是在Token失效时返回新的Token在Header信息的Authorization属性