简体   繁体   中英

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

I'm building an android app which consumes REST apis from a spring boot backend that I'm running on my device(localhost). The android application uses retrofit for this purpose.

but I'm unable to get hit any of the api's using neither my android device nor the emulator.

I've tried most of the answers provided in many different forums for this, but couldn't still find any answer.

What I've tried so far;

Running on emulator

changing the base url to have 10.0.2.2:portNo- gave no response

changing the emulator setting> Proxy to have the IP address of the network- gives the following in the springbok backend service- source

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

where '/gen_204' is used by google to check whether the device is online or not, which in this case is failing.

connecting with the device

attempted using same wifi networks and hotspots for both the devices, but no luck.

code usage with related to retrofit;

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) {

            }
        });

    }
}

The above code, when debugged, will stop after call.enqueue method

I would like to know what possibly may be going wrong. any help is appreciated.

I was able to get my emulator to work after turning off the firewall. But if you don't want to turn off the firewall, this answer works well as well https://stackoverflow.com/a/56769746/10598769 , which will grant network access to 10.0.2.2

and change the base url to have the ip 10.0.2.2

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

and make sure that 'Use Android Studio HTTP proxy settings' is checked on emulator settings.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM