Java 此应用程序的白标签错误页。。。。出现意外错误(类型=未授权,状态=401)。未经授权

Java 此应用程序的白标签错误页。。。。出现意外错误(类型=未授权,状态=401)。未经授权,java,spring-boot,spring-security,Java,Spring Boot,Spring Security,当我运行应用程序时,它会显示此错误(错误401)。 如何解决此问题,谢谢: 白标错误页 此应用程序没有/error的显式映射,因此您可以看到 这是一种退路。出现意外错误(类型=未经授权, 状态=401)。未经授权 pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http

当我运行应用程序时,它会显示此错误(错误401)。 如何解决此问题,谢谢:

白标错误页

此应用程序没有/error的显式映射,因此您可以看到 这是一种退路。出现意外错误(类型=未经授权, 状态=401)。未经授权

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <artifactId>app-back</artifactId>
    <name>app-back</name>
    <description>module app backend </description>
    <packaging>war</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>

    <properties>
        <start-class>app.AppApplication</start-class>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <hibernate.core.version>5.4.2.Final</hibernate.core.version>
        <maven.war.plugin.version>3.2.0</maven.war.plugin.version>
        <jjwt.version>0.9.1</jjwt.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-tomcat</artifactId>
           <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.core.version}</version>
        </dependency>


         <!-- Spring data JPA, default tomcat pool, exclude it -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>${jjwt.version}</version>
        </dependency>

    </dependencies>


    <build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-war-plugin</artifactId>
                 <version>${maven.war.plugin.version}</version>
                 <configuration>
                    <packagingExcludes>WEB-INF/lib/tomcat-*.jar</packagingExcludes>
                    <warName>app</warName>
                 </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals><goal>copy-resources</goal></goals>
                        <configuration>
                            <outputDirectory>${basedir}/target/classes/static/</outputDirectory >
                            <resources>
                                <resource>
                                    <directory>../app-front/dist/app-front</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

</project>
Appl.java:

package myApp.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@Configuration
@ComponentScan("app")
@EnableJpaRepositories("app.repositories")
@EntityScan( basePackages = {"app.entities"} )
@SpringBootApplication
@EnableAutoConfiguration
public class RefMetierApplication extends SpringBootServletInitializer {


    public static void main(String[] args) {
        SpringApplication.run(RefMetierApplication.class, args);
    }


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(RefMetierApplication.class);
    }

}
userServiceImpl.java中的这个方法:

@Override
    public Map<String, String> login(appUser requestUser) {
        UsernamePasswordAuthenticationToken authenticationTokenRequest = new UsernamePasswordAuthenticationToken(
                requestUser.getUsername(), requestUser.getPassword());
        try {
            Authentication authentication = this.authenticationManager.authenticate(authenticationTokenRequest);
            SecurityContext securityContext = SecurityContextHolder.getContext();
            securityContext.setAuthentication(authentication);
            appUser user = (appUser) authentication.getPrincipal();

            String token = jwtTokenProvider.createToken(requestUser.getUsername(), user.getAuthorities());
            Map<String, String> model = new HashMap<>();
            model.put("username", requestUser.getUsername());
            model.put("token", token);
            if(user.hasRule(ParamsEnum.ROLE_ADMIN.getValue())) {
                model.put("rule", "ADMIN");
            }
            else {
                model.put("rule", "USER");
            }

            return model;
        } catch (Exception e) {
            e.printStackTrace();
            throw new BadCredentialsException(ParamsEnum.BAD_CREDENTIALS.getValue());
        }
    }
@覆盖
公共地图登录(appUser requestUser){
UsernamePasswordAuthenticationTokenAuthenticationTokenRequest=新UsernamePasswordAuthenticationToken(
requestUser.getUsername(),requestUser.getPassword());
试一试{
身份验证=this.authenticationManager.authenticate(authenticationTokenRequest);
SecurityContext SecurityContext=SecurityContextHolder.getContext();
securityContext.setAuthentication(身份验证);
appUser=(appUser)身份验证。getPrincipal();
String token=jwtTokenProvider.createToken(requestUser.getUsername(),user.getAuthorities());
映射模型=新的HashMap();
model.put(“username”,requestUser.getUsername());
模型放置(“令牌”,令牌);
if(user.hasRule(ParamsEnum.ROLE_ADMIN.getValue()){
模型放置(“规则”、“管理”);
}
否则{
模型放置(“规则”、“用户”);
}
收益模型;
}捕获(例外e){
e、 printStackTrace();
抛出新的BadCredentialsException(ParamsEnum.BAD_CREDENTIALS.getValue());
}
}

对于尝试请求的用户,您不能具有设置管理员角色。

这意味着您正在调用的API/端点需要一些角色。您能指定要调用哪个端点吗?@AmitB10,在Appl.java类中,我没有understand@ali请提及该URL,您正为此收到问题@阿里:你有没有设置一个管理员角色的用户?我有管理员角色,因为我的应用程序中的用户是2,普通用户和administrators@ali请把那个密码也写出来。。我还将尝试在我的终端进行调试这里是userService.java中的登录方法
@Override
    public Map<String, String> login(appUser requestUser) {
        UsernamePasswordAuthenticationToken authenticationTokenRequest = new UsernamePasswordAuthenticationToken(
                requestUser.getUsername(), requestUser.getPassword());
        try {
            Authentication authentication = this.authenticationManager.authenticate(authenticationTokenRequest);
            SecurityContext securityContext = SecurityContextHolder.getContext();
            securityContext.setAuthentication(authentication);
            appUser user = (appUser) authentication.getPrincipal();

            String token = jwtTokenProvider.createToken(requestUser.getUsername(), user.getAuthorities());
            Map<String, String> model = new HashMap<>();
            model.put("username", requestUser.getUsername());
            model.put("token", token);
            if(user.hasRule(ParamsEnum.ROLE_ADMIN.getValue())) {
                model.put("rule", "ADMIN");
            }
            else {
                model.put("rule", "USER");
            }

            return model;
        } catch (Exception e) {
            e.printStackTrace();
            throw new BadCredentialsException(ParamsEnum.BAD_CREDENTIALS.getValue());
        }
    }