当前位置: 首页 > 知识库问答 >
问题:

无法将Spring Security性应用于Java项目

窦华晖
2023-03-14

我正在尝试将带有Spring Security的防止蛮力身份验证尝试应用到我也使用Spring Boot的Java项目中。但是,有一部分使用了web.xml,但我的项目中没有web.xml。那么,是否可以将这种方法应用到没有web.xml的Spring Boot项目中?

我还试图添加它对maven的依赖,但似乎没有。那么,我该如何应用呢?或者,您可以为Java Spring Boot项目推荐类似的方法吗?我看着贝尔东,但没有。知道吗?

更新:另一方面,我实现了除web之外的所有类。xml,我认为可能没有必要使用web。xml,因为我已经正常地将登录请求传递给了我的服务。

但是,我的服务没有检测到失败的登录尝试。我应该从userR调用一些方法epository.findByUsername()方法找不到用户吗?有什么想法吗?

注意:本文还有一个GitHubhttps://github.com/Baeldung/spring-security-registration/tree/master/src/main/java/com/baeldung/security.

@Service
@RequiredArgsConstructor
public class LoginServiceImpl implements LoginService {

    private final UserService userService;
    private final UserRepository userRepository;
    private final TokenService tokenService;
    private final PasswordEncoder passwordEncoder;
    private final LoginAttemptService loginAttemptService;
    private final HttpServletRequest request;

    @Override
    @LogExecution
    @Transactional
    public UserTokenDTO login(final LoginRequest request)
            throws JsonProcessingException, JOSEException {

        String ip = getClientIP();
        if (loginAttemptService.isBlocked(ip)) {
            throw new RuntimeException("blocked");
        }

        final User user = userRepository.findByUsername(request.getEmail())
                .orElseThrow(InvalidCredentialsException::new);

        
        final var userDTO = userService.findByUuid(user.getUuid());
        final var tokenDTO = tokenService.generateTokens(userDTO, true);
        return new UserTokenDTO(userDTO, tokenDTO);
    }

    private String getClientIP() {
        String xfHeader = request.getHeader("X-Forwarded-For");
        if (xfHeader == null){
            return request.getRemoteAddr();
        }
        return xfHeader.split(",")[0];
    }
}

共有2个答案

凌通
2023-03-14

如果你没有网络。xml,您必须在spring配置包中创建这样的类

@WebListener
public class YourContextListener extends RequestContextListener {
    [...]
}

如果Spring没有检测到它,您还可以添加@Configuration注释。

奚飞星
2023-03-14

不幸的是,我无法发表评论(声誉不够),但在下面的链接中解释了为什么您无法捕获authenticationfailurelistener,您必须使用自定义的AuthenticationFailureHandler(正如Pilpo所说)。

Spring BadCredentials事件未触发

 类似资料:
  • 这并不是: 唯一的区别是user/searchuser和group/searchgroup 当我尝试应用后者时,它只会给我一个错误: 关于为什么策略适用于用户而不是组,有什么想法吗?

  • 问题内容: 我使用Gridlayout在一行中放置4个元素。首先,我有一个JPanel,一切正常。对于行数变大并且必须向下滚动的情况,我做了一些更改。现在我添加了一个。我使用了相同的代码,现在我只是将元素添加到的视口中,但是现在却遇到了这个异常,我也不知道为什么。为什么不应该不知道Gridlayout的原因? 这是代码: 我根据编译器标记了导致问题的行。我不明白为什么,用相同的代码可以正常工作。我

  • 我想知道gradle build如何应用于现有的多java项目,这些项目没有预期的目录结构——src/main/java等等? 提前谢谢你,

  • 我需要只分析根项目,忽略嵌套的子模块,但它是d 所以我有这样的层次结构: 我的配置设置.gradle 我需要只分析根项目,忽略嵌套子模块,但我得到了: 然后我尝试添加多模块配置: 但在UI上得到消息:尚未执行任何分析 只有当我从设置中删除子项目的定义时,它才起作用。渐变,并删除所有子模块配置

  • 问题内容: 我收到此异常: 您可以在https://travis-ci.org/ilopezluna/japan-at- home/builds/37866955 上查看更多信息 我执行测试期间会抛出此异常。但是我无法在我的本地主机上重现它,所以我总是能成功建立一个:S 问题答案: 我花了两天时间,但我相信我终于解决了这个问题。在我的课堂上,我有以下方法: 我用一种方法代替了该方法: 现在一切正常

  • 我无法构建gradle项目,即使我编辑gradle属性,我也会得到以下错误: 我该如何解决这个问题?