小编Joh*_*rin的帖子

Maven PMD 插件 3.18.0 抛出 java.lang.NoSuchMethodError

我正在开发一个长期运行的多模块 Maven Java 项目。我尝试将 PMD 插件从 3.17.0 更新到 3.18.0,但我几乎立即从 PMD 收到 java.lang.NoSuchMethodError。PMD 插件的 3.17.0 版本在此项目上运行良好,但我在发行说明中没有找到任何可以帮助我理解错误的内容。希望这里能理解 PMD 插件或错误,并能引导我找到根本问题。该项目使用 Maven 3.5、JKD 11 构建,编译目标为 JDK8。PMD版本是6.48.0

POM 片段和错误输出如下。

                    <artifactId>maven-pmd-plugin</artifactId>
                    <version>${pmd.plugin.version}</version>
                    <executions>
                        <execution>
                            <phase>verify</phase>
                            <goals>
                                <goal>check</goal>
                                <goal>cpd-check</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <skip>${skip.analyze}</skip>
                        <analysisCache>true</analysisCache>
                        <analysisCacheLocation>${project.build.directory}/pmd/pmd.cache</analysisCacheLocation>
                        <failOnViolation>false</failOnViolation>
                        <rulesets>
                            <ruleset>../ruleset.xml</ruleset>
                        </rulesets>
                        <printFailingErrors>false</printFailingErrors>
                        <linkXRef>false</linkXRef>
                        <targetJdk>1.8</targetJdk>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-core</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-java</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-javascript</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-jsp</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-apex</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-visualforce</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>``` …
Run Code Online (Sandbox Code Playgroud)

java pmd maven-plugin

5
推荐指数
1
解决办法
1672
查看次数

Spring-Boot @PreAuthorize仅允许管理员或通过身份验证的用户ID与路径参数ID相同的操作

我有一个具有用户CRUD操作的控制器。

@Controller
public class UserController {

  // @TODO need to check whether userId == authUser.id or authUser is admin??
  //
  @PreAuthorize("hasRole('ROLE_ADMIN) or ...???...")
  @PostMapping("/user/{id}/edit")
  public boolean editUser(@PathVariable("id") long userId,
                          @RequestBody User newUserObj,
                          @CurrentUser authUser) {
     // I don't like to always call a helper function from here
     // check(authUser.getId() == userId);

     return userService.edit(userId, newUserObj);
  }

 // ... rest of the methods

}
Run Code Online (Sandbox Code Playgroud)

此操作仅允许管理员或用户使用。没有用户可以编辑任何其他人的用户配置文件。

我已经尝试过@PreAuthorize("hasRole('ROLE_ADMIN')),它仅适用于admin用户,但是我想检查通过身份验证的用户是否与参数userIdauthUser.getId() == userId)所示的用户相同。如何在注释中定义此表达式?不用编写辅助函数就能做到这一点。

如果需要的话,我还会使用@CurrentUser注释将当前经过身份验证的用户注入到控制器方法中。

java spring-security spring-el spring-boot

3
推荐指数
1
解决办法
838
查看次数