簡體   English   中英

如何使用 android 設備從本地主機(Mac)中的服務訪問 apis

[英]How to access apis from service in localhost (Mac) using android device

我正在構建一個 android 應用程序,它從我在我的設備(本地主機)上運行的 spring 啟動后端使用 REST api。 android 應用程序為此目的使用改造。

但是我既不能使用我的 android 設備也不能使用模擬器來訪問任何 api。

我已經嘗試了許多不同論壇中為此提供的大部分答案,但仍然找不到任何答案。

到目前為止我嘗試過的;

在模擬器上運行

將基本 url 更改為 10.0.2.2:portNo- 沒有響應

更改模擬器設置>代理以獲得網絡的IP地址-在springbok后端服務中提供以下內容-

Request received for GET '/gen_204':

org.apache.catalina.connector.RequestFacade@19ebbc48

servletPath:/gen_204
pathInfo:null
headers: 
user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.32 Safari/537.36
host: www.google.com
connection: Keep-Alive
accept-encoding: gzip


Security filter chain: [
  WebAsyncManagerIntegrationFilter
  SecurityContextPersistenceFilter
  HeaderWriterFilter
  CorsFilter
  LogoutFilter
  JWTAuthenticationFilter
  RequestCacheAwareFilter
  SecurityContextHolderAwareRequestFilter
  AnonymousAuthenticationFilter
  SessionManagementFilter
  ExceptionTranslationFilter
  FilterSecurityInterceptor
]


************************************************************


2020-03-12 15:45:21.473 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 1 of 12 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter'
2020-03-12 15:45:21.474 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 2 of 12 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
2020-03-12 15:45:21.474 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 3 of 12 in additional filter chain; firing Filter: 'HeaderWriterFilter'
2020-03-12 15:45:21.475 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 4 of 12 in additional filter chain; firing Filter: 'CorsFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 5 of 12 in additional filter chain; firing Filter: 'LogoutFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 6 of 12 in additional filter chain; firing Filter: 'JWTAuthenticationFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 7 of 12 in additional filter chain; firing Filter: 'RequestCacheAwareFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 8 of 12 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 9 of 12 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 10 of 12 in additional filter chain; firing Filter: 'SessionManagementFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 11 of 12 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /gen_204 at position 12 of 12 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'
2020-03-12 15:45:21.477  INFO 36507 --- [nio-8080-exec-7] l.a.e.o.A.JwtAuthenticationEntryPoint    : Unauthorized error. Message - Full authentication is required to access this resource
2020-03-12 15:45:21.478  INFO 36507 --- [nio-8080-exec-7] Spring Security Debugger                 : 

************************************************************

Request received for GET '/error':

org.apache.catalina.core.ApplicationHttpRequest@78d558cf

servletPath:/error
pathInfo:null
headers: 
user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.32 Safari/537.36
host: www.google.com
connection: Keep-Alive
accept-encoding: gzip


Security filter chain: [
  WebAsyncManagerIntegrationFilter
  SecurityContextPersistenceFilter
  HeaderWriterFilter
  CorsFilter
  LogoutFilter
  JWTAuthenticationFilter
  RequestCacheAwareFilter
  SecurityContextHolderAwareRequestFilter
  AnonymousAuthenticationFilter
  SessionManagementFilter
  ExceptionTranslationFilter
  FilterSecurityInterceptor
]


************************************************************


2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 1 of 12 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 2 of 12 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 3 of 12 in additional filter chain; firing Filter: 'HeaderWriterFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 4 of 12 in additional filter chain; firing Filter: 'CorsFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 5 of 12 in additional filter chain; firing Filter: 'LogoutFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 6 of 12 in additional filter chain; firing Filter: 'JWTAuthenticationFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 7 of 12 in additional filter chain; firing Filter: 'RequestCacheAwareFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 8 of 12 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 9 of 12 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 10 of 12 in additional filter chain; firing Filter: 'SessionManagementFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 11 of 12 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
2020-03-12 15:45:21.480 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error at position 12 of 12 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'
2020-03-12 15:45:21.480 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : /error reached end of additional filter chain; proceeding with original chain

其中 '/gen_204' 被谷歌用來檢查設備是否在線,在這種情況下是失敗的。

與設備連接

嘗試為兩個設備使用相同的 wifi 網絡和熱點,但沒有運氣。

與改造相關的代碼使用;

public interface AuthApis {

    @POST("login")
    Call<LoginRequest> signInUser(@Body LoginRequest loginRequest);

    @POST("register")
    Call<UserDTO> registerUser(@Body UserDTO dto);

}
public class RegistrationActivity extends AppCompatActivity {
    private EditText name_et;
    private EditText email_et;
    private EditText password_et;
    private EditText confirmpass_et;

    private AuthApis authApis;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_registration);

        getSupportActionBar().setTitle("Registration");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        this.name_et=findViewById(R.id.unameET);
        this.email_et=findViewById(R.id.emailET);
        this.password_et=findViewById(R.id.passET);
        this.confirmpass_et=findViewById(R.id.confirmPassET);

        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl("http://localhost:8080/auth/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        authApis=retrofit.create(AuthApis.class);
    }

    public void signupBtn_onClick(View view) {
        String name = name_et.getText().toString();
        String email = email_et.getText().toString();
        String password = password_et.getText().toString();
        String confirm_password = confirmpass_et.getText().toString();

        UserDTO dto=new UserDTO();
        dto.setUserName(name);
        dto.setEmail(email);
        dto.setPassword(password);
        dto.setConfirmPassword(confirm_password);

        Call<UserDTO> userDTOCall=authApis.registerUser(dto);

        userDTOCall.enqueue(new Callback<UserDTO>() {
            @Override
            public void onResponse(Call<UserDTO> call, Response<UserDTO> response) {
                if(!response.isSuccessful()){
                    System.out.println(response.code());
                }

                System.out.println(response.body());
            }

            @Override
            public void onFailure(Call<UserDTO> call, Throwable t) {

            }
        });

    }
}

上面的代碼,在調試的時候,會在call.enqueue方法之后停止

我想知道可能出了什么問題。 任何幫助表示贊賞。

關閉防火牆后,我能夠讓我的模擬器工作。 但是如果你不想關閉防火牆,這個答案也適用https://stackoverflow.com/a/56769746/10598769 ,這將授予對 10.0.2.2 的網絡訪問權限

並將基本 url 更改為 ip 10.0.2.2

Retrofit retrofit=new Retrofit.Builder()
                .baseUrl("http://10.0.2.2:8080/auth/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

並確保在模擬器設置中選中“使用 Android Studio HTTP 代理設置”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM